Вычислить 15 строк параллельно (через векторизацию) и создать из них df - PullRequest
2 голосов
/ 12 мая 2019

Я создаю 15 строк в кадре данных, вот так. Я не могу показать свой реальный код, но функция создания строки включает в себя сложные вычисления, которые можно поместить в функцию. Любые идеи о том, как я могу сделать это, используя lapply, apply и т.д., чтобы создать все 15 параллельно, а затем объединить все строки в кадре данных? Я думаю, что использование lapply будет работать (т.е. поместить все строки в список, затем удалить из списка и объединить, но не совсем уверен, как это сделать).

for( i in 1:15 ) {
    row <- create_row()
    # row is essentially a dataframe with 1 row
    rbind(my_df,row)
}

1 Ответ

2 голосов
/ 12 мая 2019

Что-то вроде этого должно работать для вас,

create_row <- function(){
  rnorm(10, 0,1)
}

my_list <- vector(100, mode = "list")
my_list_2 <- lapply(my_list, function(x) create_row())
data.frame(t(sapply(my_list_2,c)))

Функция create_row просто делает воспроизводимый пример, затем мы заранее определяем пустой список, затем заполняем его результатом из create_row()функции, затем преобразуйте полученный список во фрейм данных.

В качестве альтернативы, предварительно определите матрицу и используйте функции apply над полем строки, затем используйте функцию t (transpose), чтобы получитьвывод правильный,

df <- data.frame(matrix(ncol = 10, nrow = 100))
t(apply(df, 1, function(x) create_row(x)))
...