【问题标题】:R: How to phrase iterating through a vector of unknown lengthR:如何通过未知长度的向量进行短语迭代
【发布时间】:2014-10-03 19:03:20
【问题描述】:

想通了。可以删除。

我正在寻找使 E yi(xi-u)^2 最小二乘的平均值的单个整数,其中“E”是总和。所以,(1*((0.1-0.108)^2)) + (2*((0.11-0.108)^2)) + ...

这个在 R 里怎么说? len 不是函数,length 使用与实际长度对应的数值...不要从头开始迭代,无论多长。

 x<-c(0.1, 0.11, 0.111, 0.1111)
 y<-c(1, 2, 3, 4)
 avg = mean(x)
 for (i in 1:length(x)) {
    for (j in 1:length(y)) {
        mu = sum(j*(i-avg)^2) 
        print(mu)
    }
}

【问题讨论】:

  • 我很困惑。 i in 1:length(x) 有什么问题?您正在运行的代码会产生什么输出?
  • 另见?seq_len?seq_along
  • 看来你的python也生锈了……
  • 在我看来,您想使用for (i in x)for (j in y),它们在 R 中可以正常工作。如果您尝试计算 x 的加权平方误差,那么您应该对计算进行矢量化. for i in len(vector) 在 python 中做了什么?由于len(vector) 不是列表,我希望它只会引发错误。
  • @JamesKing 它确实给出了一个错误,正是这个:TypeError: 'int' object is not iterable

标签: r loops vector string-length


【解决方案1】:

我完全不确定你的问题是什么,但会借此机会说一下

for (i in 1:length(x))
...

不是好习惯,因为x的长度为0时会中断。原因是1:0在R中是c(1,0)

1:0
# [1] 1 0

所以,正如 @thelatemail 已经提到的那样,seq_lenseq_along 是迭代向量或列表索引的正确方法:

for (i in seq_along(x))
...

seq_len 有点长,可读性差:

for (i in seq_len(length(x)))
...

从您的问题来看,您似乎很可能想要遍历向量或列表的元素,所以您可以简单地说

for (elem in x)
...

另请注意,在 R 中,您可以使用向量而不是编写 for 循环。

【讨论】:

  • 我认为for (elem in x)是OP所想的,但是这段代码仍然不会给出他想要的答案。我想他只是想做计算sum(y*(x - mean(x))^2) = 0.0001365762
  • @JamesKing:确实,我没有真正看大局。 :)
  • 使用 seq_len 我收到错误“警告消息:在 seq_len(x) 中:'length.out' 参数使用的第一个元素”
  • @user3814464 好吧,如果你一直做的事情与你被告知的不同,那么我们能做些什么呢? :) 说真的,请在我的回答中使用其中一种形式。如果您坚持使用seq_len,我将编辑问题以添加该问题。但你只想要for (i in x),或者更好的是@JamesKing 给你的矢量化形式。
猜你喜欢
  • 2017-12-30
  • 2017-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-16
  • 2016-01-08
  • 1970-01-01
相关资源
最近更新 更多