Использование Саппи внутри Саппи - PullRequest
0 голосов
/ 29 мая 2019

Мне нужно выполнить sapply внутри другого sapply.

Это рабочий код, который у меня есть.

animal <- c("Dog", "Cat", "Bird", "Fish", "Monkey", "Lion", "Dolphin", "Panda")
a <- as.data.frame(sapply(1:7, function(y) rbinom(30, 1, sample(seq(.4, .9, by=.1), 1, prob = NULL))))
colnames(a) <- (animal)

Я бы хотел построить этот фрейм данных 10 раз, не делая этого.

animal <- c("Dog", "Cat", "Bird", "Fish", "Monkey", "Lion", "Dolphin", "Panda")

a <- as.data.frame(sapply(1:7, function(y) rbinom(30, 1, sample(seq(.4, .9, by=.1), 1, prob = NULL))))
colnames(a) <- (animal)

b <- as.data.frame(sapply(1:7, function(y) rbinom(30, 1, sample(seq(.4, .9, by=.1), 1, prob = NULL))))
colnames(b) <- (animal)

...

j <- as.data.frame(sapply(1:7, function(y) rbinom(30, 1, sample(seq(.4, .9, by=.1), 1, prob = NULL))))
colnames(j) <- (animal)

Я пробовал это без успеха

sapply(letters[1:10], function(z) as.data.frame(sapply(1:7, function(y) rbinom(300, 1, sample(seq(.4, .9, by=.1), 1, prob = NULL)))), colnames(letters[1:10]) <- (animal))

Спасибо

1 Ответ

0 голосов
/ 30 мая 2019

Если вам нужно сделать это с двумя функциями типа apply, вы можете сделать что-то вроде этого:

Также у вас есть восемь животных в animal и только 7 столбцов. Итак, я сократил animal.

Использование lapply во внешнем цикле всегда возвращает список, что делает его немного лучше, чем sapply из того, что, как я понимаю, вы пытаетесь сделать.

animal <- c("Dog", "Cat", "Bird", "Fish", "Monkey", "Lion", "Dolphin")

lapply(1:10, function(x){
  a <- as.data.frame(
    sapply(1:7, function(y) rbinom(30, 1, sample(seq(.4, .9, by=.1), 1, prob = NULL)))
  )
  names(a) <- (animal)
  a
})
...