在循环中追加到数组

时间:2013-11-25 17:30:32

标签: arrays r for-loop

我是一名学习R的SAS程序员。

我从csv文件中读取矩阵应收款

如果行的“id”列值>> = 1100000000,我希望读取“transit”列中的值。

我这样做了(循环1):

x = vector()
for (i in 1:length(receivables[,"transit"])){
  if(receivables[i,"id"] >= 1100000000){
     append(x, receivables[i,"transit"]);
  }
}

但是,它不起作用,因为在运行循环后x仍然是空的。

  

&X的催化剂
  逻辑(0)

然而,我能够完成我的任务(循环2):

k=0
x=vector()
for (i in 1:length(receivables[,"transit"])){
  if(receivables[i,"id"] >= 1100000000){
     k=k+1
     x[k] = receivables[i,"transit"]
  }
}

或者,(循环3):

x = vector()
for (i in 1:length(receivables[,"transit"])){
  if(receivables[i,"id"] >= 1100000000){
     x <- append(x, receivables[i,"transit"]);
  }
}

为什么append函数在循环中不像在命令行中那样工作?

实际上,教我如何捕鱼,在循环中操作函数时必须记住的态度/态度是什么,而不是在命令行中操作它们。

哪个效率更高?循环2或循环3?

1 个答案:

答案 0 :(得分:4)

好的,有些事情。

append在您第一次尝试时无效,因为您没有将结果分配给任何内容。一般来说,R不起作用“到位”。它更像是一种功能语言,这意味着必须始终将更改分配给某些内容。 (也有例外,但是过早地试图弯曲这个规则会让你遇到麻烦。)

更重要的一点是,R中“增长”的物体是一个很大的禁忌。你会很快开始想知道为什么任何人都可以使用R,因为像这样的增长对象会很快变得非常非常慢。

相反,学会使用矢量化操作,例如:

receivables[receivables[,"id"] >= 1100000000,"transit"]