2016-12-23 3 views
1

Я хочу использовать lapply в R.Как преобразовать результаты из lapply в матрицу в R?

Кроме того моя функция выглядит следующим образом:

func_countries <- function(x){ 
     Country <- x 
     Nrow <- nrow(data[which(data$country == x),]) 
     Res <- list(Country, Nrow) 
     return(Res)} 

Overview_countries <- unlist(lapply(countries_list, func_countries)) 

Как я могу получить результат lapply отображаемый в матрицу, которую я могу использовать для дальнейших вычислений? Я попробовал следующее, но это не помогло, потому что числа не являются числовыми, и я не могу использовать, например, '$' для выбора столбцов.

Overview_countries <- matrix(Overview_countries, nrow=2, dimnames=list(c('Country', 'Numb_obs'))) 
Overview_countries <- t(Overview_countries) 
+2

Вместо того чтобы использовать '$', вы можете использовать '[['. Просьба представить небольшой воспроизводимый пример и ожидаемый результат. Кроме того, если «Страна» не является числовой, вывод data.frame будет лучше, так как «matrix» может содержать только один класс. Итак, 'Res <- data.frame (Country, Nrow)' в функции и использовать 'do.call (rbind, lapply (countries_list, func_countires))' – akrun

ответ

1

Ваш подход не всегда является лучшим здесь; как сказал @akrun, кадр данных будет казаться более подходящим, чем матрица, и такие пакеты, как dplyr и data.table, могут выполнять эти агрегации более элегантно.

Но ответ на ваш вопрос: вы можете использовать аргумент byrow, чтобы получить то, что вы (возможно) хотите.

Я создал небольшой вектор a, который должен быть аналогичен выходу unlist(lapply(, который вы используете.

a <- list(list('Belgium',25), list('Holland', 89), list('UK', 784)) 
a <- unlist(a) 

res <- matrix(a, nrow=3, byrow=TRUE, dimnames=list(NULL, c('Country', 'Numb_obs'))) 

Выход:

 Country Numb_obs 
[1,] "Belgium" "25" 
[2,] "Holland" "89" 
[3,] "UK"  "784" 
Смежные вопросы