在for循环中创建向量

时间:2015-05-17 00:39:43

标签: r for-loop

我很惭愧我在这么简单的任务上需要帮助。我想创建20个正态分布数字,添加它们,然后再次执行x次。然后绘制这些总和的直方图。这是吉尔曼和希尔斯文本"数据分析使用回归和多级/分层模型的练习"。

我认为这很简单,但现在我已经进入了大约10个小时。网络搜索和查看" R编程的艺术"由Norman Matloff和" R for Everyone"由贾里德兰德没有帮助。我怀疑答案很简单,没有人怀疑有问题。 R中的语法是我遇到困难的。

    > #  chapter 2 exercise 3
    > n.sim <- 10  #  number of simultions
    > 
    > sumNumbers <- rep(NA, n.sim) #  generate vector of NA's
    > for (i in 1:n.sim)  #  begin for loop
     +{
     +     numbers <- rnorm(20,0,1)  
     +     sumNumbers(i) <- sum(numbers) #  defined as a vector bur R 
     +                                   #  thinks it's a function
     + }
 Error in sumNumbers(i) <- sum(numbers) :     
 could not find function "sumNumbers<-"
 > 
 > hist(sumNumbers)    
 Hide Traceback

 Rerun with Debug    
 Error in hist.default(sumNumbers) : 'x' must be numeric     
 3 stop("'x' must be numeric")   
 2 hist.default(sumNumbers)  
 1 hist(sumNumbers) 
 > 

2 个答案:

答案 0 :(得分:1)

一些事情:

  1. 当您将括号放在变量名后面时,R解释器会假定它是一个函数。在您的情况下,您想要引用变量的索引,因此它应该是sumNumbers[i] <- sum(numbers),它使用方括号代替。 这将解决您的问题。

  2. 您可以将sumNumbers作为sumNumbers = numeric(n.sim)发起。在这种简单的情况下,它更容易阅读。

  3. 默认情况下,rnorm(n)rnorm(n,0,1)相同。这可以节省您输入的时间。

答案 1 :(得分:0)

您可以使用replicate函数复制指定次数的操作:

set.seed(144) # For consistent results
(simulations <- replicate(10, sum(rnorm(20))))
#  [1] -9.3535884  1.4321598 -1.7812790 -1.1851263 -1.9325988  2.9652475  2.9559994
#  [8]  0.7164233 -8.1364348 -7.3428464

模拟适当数量的样本后,您可以使用hist(simulations)进行绘图。