rbind和mapply - 获取矩阵而不是数据框

时间:2015-07-30 20:05:03

标签: r

所以,我正在尝试将列表传递给通过mapply返回数据框的函数,然后将do.call rbind一起用于一个数据框。< / p>

这是一些虚拟代码:

var_1 <- list(1, 2)
var_2 <- list(3, 4)

output <- do.call(
    rbind,
    mapply(
      function(x, y) {return(data.frame(x, y, x+y))},
      var_1,
      var_2
    )
  )

预期结果:包含2行3列的数据框。

实际结果:6x1矩阵。

关于我在这里做错了什么想法?

1 个答案:

答案 0 :(得分:5)

使用do.call时,您需要传入参数列表。目前,您的mapply调用不会重新列出列表,它会将结果简化为矩阵。你想要的是防止简化。您可以设置SIMPLIFY=参数

output <- do.call(
    rbind,
    mapply(
      function(x, y) {return(data.frame(x, y, x+y))},
      var_1,
      var_2, SIMPLIFY=FALSE
    )
  )

或只使用始终返回列表的Map()

output <- do.call(
    rbind,
    Map(
      function(x, y) {return(data.frame(x, y, x+y))},
      var_1,
      var_2
    )
  )