【问题标题】:simulation a while loop模拟一个while循环
【发布时间】:2015-05-11 16:29:04
【问题描述】:

while 循环中可能有一些线程,但我正在努力解决它们。如果有人可以帮助 R 初学者,那就太好了。

所以我尝试使用预测参数从样本外回归预测中进行 10000 次模拟:均值、标准差。还好我的数据正常。

这就是我所拥有的

N<-10000
i<-1:N
k<-vector(,N)
while(i<N+1){k(,i)=vector(,rnorm(N,mean=.004546,sd=.00464163))}

...我收到此错误

Error in vector(, rnorm(5000, mean = 0.004546, sd = 0.00464163)) : 
invalid 'length' argument
In addition: Warning message:
In while (i < N + 1) { : the condition has length > 1 and only the first element will be used

我似乎无法理解它。

【问题讨论】:

    标签: r for-loop while-loop


    【解决方案1】:

    没有理由在这里创建一个循环。如果你想将 10000 个样本,正态分布在 mean = 0.004546 和 sd = 0.00464163 周围放入向量 k,只需:

    k <- rnorm(10000,mean = 0.004546, sd = 0.00464163)
    

    【讨论】:

      【解决方案2】:

      试试这个

      N<-10
      i<-1
      k<-matrix(0,1,N)
      while(i<N+1){k[i]=rnorm(1,mean=.004546,sd=.00464163)
      i=i+1
      }
      print(k)
      

      【讨论】:

        【解决方案3】:

        要解决您的问题,请使用@Esben Friis 的回答。你正在对一个简单的问题采取强硬的方法。

        为了解决您对收到的错误消息的疑问:

        Error in vector(, rnorm(5000, mean = 0.004546, sd = 0.00464163)) : 
        invalid 'length' argument
        

        这是错误的做法,因为vector() 将生成一个设定长度的向量而不是一组值。您正在考虑as.vector() 函数:

        as.vector(rnorm(5000, mean = 0.004546, sd = 0.00464163))
        

        但这不是必需的,因为这只会创建一个新的值向量,这些值已经在 double 类型的向量结构中。因此,使用此功能不会改变任何东西。

        最好简单使用:

        rnorm(5000, mean=0.004546, sd=0.00464163)
        

        进一步:

        In addition: Warning message:
        In while(i<N+1){: the condition has length>1 and only the first element will be used
        

        此警告源于 i 是一个长度大于 1 的向量 1:N。警告指出只有 i 中的第一个索引将被回收(在循环的所有实例中使用),即和i[1] 一样。

        while(i<N+1){ }
        #is the same as
        while(i[1]<N+1){ }
        

        相反,您希望将新值循环到 N。此外,您可以使用 &lt;=(小于或等于)运算符而不是 &lt;N+1

        while(newVal<=N){ }
        

        这种方法会带来新的问题,可以通过使用for() 循环来解决,但是这超出了问题的范围,并且确实不是解决问题的正确方法,如开头所述。希望你学到了一些东西,祝你好运!

        【讨论】:

          猜你喜欢
          • 2017-04-16
          • 2010-10-19
          • 2013-05-05
          • 2013-11-08
          • 2019-03-08
          • 2012-12-03
          • 1970-01-01
          • 2022-10-12
          相关资源
          最近更新 更多