【问题标题】:Output vector of loop function r循环函数 r 的输出向量
【发布时间】: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 &lt;- numeric(5) 然后out[i] &lt;- sample(1:100, 1)。或者,out &lt;- sample(1:100, 5, replace=TRUE)
  • 感谢您对循环的建议,尽管我遇到的问题是我在这里称为函数(为了简单起见)实际上是对多个随机数据集的模拟,以指定算法的准确性(我还是个初学者)。我将在这里阅读 R 中的循环,谢谢提及!
  • 在您使用它的方式(作为向量,而不是矩阵)中,您应该使用c() 而不是cbind()但是,请听听 jeremycg 关于“增长”对象的建议 - 它会破坏性能,甚至可以让简单的代码花费很长时间。

标签: r loops vector resultset


【解决方案1】:

这个呢

 out <- sample(100,5)

更新

我明白为什么我得到一个 -1,OP 想要用 for 循环构造一个向量。需要注意的是,以这种方式创建向量通常不是一个好主意。例如,我上面的代码比 OP 的代码更简单、更快。尽管如此,如果您想使用 for 循环生成一个随机数向量,请使用此方法

my.loop <- function(l){
    out_1 <- numeric(l)
    for (i in 1:l)  {
        out_1[i] <- sample(1:100, 1)
    }
    out_1
}

这将比下面的 op 方法好得多,因为我们正在预分配内存。

op.loop <- function(l){
    out_2 = NULL
    for (i in 1:l)  {
        out_2 <- cbind(out_2, sample(1:100, 1))
    }
    out_2
}

为了好玩,我对这两种方法进行了计时:

【讨论】:

    猜你喜欢
    • 2018-10-20
    • 2021-04-11
    • 2019-02-09
    • 2016-08-18
    • 1970-01-01
    • 2020-05-10
    • 2015-04-04
    • 1970-01-01
    • 2011-04-12
    相关资源
    最近更新 更多