【发布时间】:2016-03-02 19:33:04
【问题描述】:
我正在尝试创建一个循环的输出向量,其中包含每个循环的结果。
out=NULL
for (i in 1:5) {
out<-cbind(out,sample(1:100, 1)) #placeholderfunction
for (i in 1:5) {out[i]<- i+1}
}
好的一面:我的结果包含正确的值。坏的一面:它作为一个矩阵,我不知道为什么。
> out
out
[1,] 2 71 14 46 96
[2,] 3 71 14 46 96
[3,] 4 71 14 46 96
[4,] 5 71 14 46 96
[5,] 6 71 14 46 96
我想要的是这样的:
> out
out
[1,] 2 71 14 46 96
可能离我的立场只有一小步,但我就是想不通,也许有人可以帮忙? (是的,我可以删除,但我希望我的代码干净)
谢谢!
好的, 通过以这种规模再次查看问题,我发现它 - 一条多余的线:
> out=NULL
> for (i in 1:5) {
+ out<-cbind(out,sample(1:100, 1))
+ }
> out
[,1] [,2] [,3] [,4] [,5]
[1,] 63 98 78 43 19
【问题讨论】:
-
在循环中增长一个向量是不好的做法(就像一般的 r 中的循环一样)。为什么不在循环内做
out <- numeric(5)然后out[i] <- sample(1:100, 1)。或者,out <- sample(1:100, 5, replace=TRUE) -
感谢您对循环的建议,尽管我遇到的问题是我在这里称为函数(为了简单起见)实际上是对多个随机数据集的模拟,以指定算法的准确性(我还是个初学者)。我将在这里阅读 R 中的循环,谢谢提及!
-
在您使用它的方式(作为向量,而不是矩阵)中,您应该使用
c()而不是cbind()。 但是,请听听 jeremycg 关于“增长”对象的建议 - 它会破坏性能,甚至可以让简单的代码花费很长时间。