【问题标题】:How can I transform results from lapply into a matrix in R?如何将结果从 lapply 转换为 R 中的矩阵?
【发布时间】:2017-05-09 02:44:15
【问题描述】:

我想在 R 中使用 lapply。

此外,我的函数如下所示:

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)

【问题讨论】:

  • 您可以使用[[,而不是使用$。请提供一个小的可重现示例和预期输出。此外,如果“国家/地区”不是数字的,则 data.frame 输出会更好,因为matrix 只能容纳一个类。所以,Res &lt;- data.frame(Country, Nrow) 在函数中使用do.call(rbind, lapply(countries_list, func_countires))

标签: r function matrix lapply


【解决方案1】:

您的方法不一定是最好的;正如@akrun 所说,数据框似乎比矩阵更合适,而像dplyrdata.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"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-19
    • 1970-01-01
    • 2017-04-06
    • 2021-09-29
    • 2013-01-14
    • 2013-06-08
    相关资源
    最近更新 更多