Я поставил перед собой небольшую проблему на пути к обучению R. Вопрос был, учитывая выборку из 500 чисел в нормальном распределении со средним значением 20, сколько чисел до 20 я получу для стандартных отклонений от 6 до 10. Просто Чтобы узнать больше, я решил получить 4 образца для каждого SD. Итак, к концу у меня должно быть:
sd6samp1: ...
sd6samp2: ...
....
sd10samp4: ...
Мой первый подход, который сработал, был:
ddss<-c(6:10) # sd's
sam<-c(1:4) # 4 samples for each
k=0 # counter in 0
for (i in ddss) { # for each sd
for (j in sam) { # for each sample
nam <- paste("sam",i,".",j, sep="") # building a name
n <- assign(nam,rnorm(500, 20, i)) # the great assign function
k <- k+sum(n<=0)
}
print(assign(paste("ds",i,sep=""), k)) # ohh assign you're great
k=0 # reset counter
}
Ища, как создавать имена переменных с помощью цикла 'i', обнаружил, что 'assign' выполняет свою работу, но он также сказал:
Обратите внимание, что если вы планируете некоторые симуляции,
многие guRus скажут, что вы должны использовать список.
Так что я подумал, что было бы хорошо выучить списки ...
В то же время я также обнаружил отличный вариант ...
ддсс <- с (6:10) </p>
for (i in ddss) {
print(paste('prob. x<=0), with sd=',i))
print(pnorm(0,mean=20,sd=i)*500)
}
Это сработало, чтобы ответить на вопрос, но списки еще предстояло составить ... и многое из R еще предстоит изучить. Основная идея состояла не в том, чтобы узнать саму вероятность или количество негативов ... а в том, чтобы узнать R и, в частности, некоторые циклы.
Итак, я пытался использовать упомянутые списки
Мой самый близкий подход был:
ddss<-c(6:10) # sd's to be calculated.
sam<-c(1:4) # 4 samples for each sd
liss<-list() # initializing the list
for (i in ddss) { # for each sd
liss[[i]] <- list()
for (j in sam) { # for each sample
liss[[i]][[j]] <- rnorm(500, 20, i)
print(paste('ds',i,'samp',j,'=',sum(liss[[i]][[j]]<0)))
}
}
С этим я получаю информацию, но меня интересуют два вопроса (1 и 2) и некоторые другие вопросы (3 и 4):
Я получаю список из 10 элементов, 6 пустых и затем 4 с подсписками. Кажется, я не могу понять, как работать с элементами 1: 4 списка (sd) с именами 6: 9 (сами sd).
Даже при том, что я пытался, я не мог назвать элементы списков через циклы 'for'. Любое понимание этих вопросов было бы замечательно.
Так как в этом контексте симуляции. Как вы думаете, что лучше: вложенные списки (списки с подсписками) или простые (более длинные) списки?
Мне было интересно, будут ли здесь полезны функции apply, я пытался что-то сделать, например:
vbv<-matrix(c(6,6,6,6,7,7,7,7,8,8,8,8,9,9,9,9))
lsl<-apply(vbv, 2, function(x) rnorm(500,20,x))
Но, похоже, я даже близко не подхожу ...
Спасибо за ваше время, если вы прочитали это далеко!
Вы можете также взять еще немного, чтобы ответить; -).