我很惭愧我在这么简单的任务上需要帮助。我想创建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)
>
答案 0 :(得分:1)
一些事情:
当您将括号放在变量名后面时,R解释器会假定它是一个函数。在您的情况下,您想要引用变量的索引,因此它应该是sumNumbers[i] <- sum(numbers)
,它使用方括号代替。 这将解决您的问题。
您可以将sumNumbers
作为sumNumbers = numeric(n.sim)
发起。在这种简单的情况下,它更容易阅读。
默认情况下,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)
进行绘图。