Поскольку вы инициализировали boys
, girls
и ratioboygirl
как lists
, вам нужно передавать отдельные числа, используя двойные скобки [[]]
, а не одну скобку []
, которая вместо этого пропускает список.Вы можете проверить это на простом примере.
a <- list(1,2,3)
a[1] + a[2]
#Error in a[1] + a[2] : non-numeric argument to binary operator
a[[1]] + a[[2]]
#[1] 3
Вы также можете использовать str(a[1] + a[2])
и str(a[[1]] + a[[2]])
, чтобы увидеть, что каждый из них возвращает.Первый возвращает list
, а второй num
.Точно так же вы можете изменить свой код следующим образом, чтобы получить желаемый результат.unlist
преобразует вывод, который является list
в num
, чтобы произвести вывод, аналогичный вашему первому сценарию.
set.seed(777)
boys <- list()
girls <- list()
ratioboygirl <- list()
for (ii in 1:10) {
boys[[ii]] <- 0
girls[[ii]] <- 0
N <- 10
while (N>=1) {
boyorgirl <- sample (c("boy", "girl"), N, replace = TRUE)
boys[[ii]] <- boys[[ii]] + length(which(boyorgirl=="boy"))
girls[[ii]] <- girls[[ii]] + length(which(boyorgirl=="girl"))
N <- length(which(boyorgirl=="girl"))
}
ratioboygirl[[ii]] <- boys [[ii]] / girls [[ii]]
}
ratioboygirl_out<- unlist(ratioboygirl)
# ratioboygirl_out
#[1] 0.5263158 0.6250000 2.5000000 2.5000000 1.6666667 0.5555556 0.7692308
# [8] 0.6250000 0.7692308 0.8333333
Измените 10
на номер, который вам нравится (1000
).