2015-05-17 3 views
2

Мне стыдно Мне нужна помощь по такой простой задаче. Я хочу создать 20 нормальных распределенных чисел, добавить их, а затем сделать это снова x раз. Затем постройте гистограмму этих сумм. Это упражнение в тексте Гилмана и Хиллса «Анализ данных с использованием регрессионных и многоуровневых/иерархических моделей».Создание вектора в цикле for

Я думал, что это будет просто, но я вхожу в него около 10 часов. Веб-поиск и поиск в «Программе программирования R» Нормана Матлоффа и «R для всех» Джареда Ландера не помогли. Я подозреваю, что ответ настолько прост, что никто не будет подозревать проблему. Синтаксис в 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) 
> 
+1

Возможно, вы захотите пометить язык, который вы используете в будущем. Это делает намного легче для вашего вопроса, чтобы его видели правильные люди. – jpw

ответ

1

Несколько вещей:

  1. Когда вы кладете круглые скобки после имени переменной, интерпретатор R предполагает, что это функция. В вашем случае вы хотите ссылаться на индекс переменной, поэтому он должен быть sumNumbers[i] <- sum(numbers), который вместо этого использует квадратные скобки. Это решит вашу проблему.

  2. Вы можете инициировать sumNumbers как sumNumbers = numeric(n.sim). В простом случае это легче читать.

  3. По умолчанию rnorm(n) - это то же самое, что и rnorm(n,0,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).

Смежные вопросы