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

Joh*_*tom 1 r

所以,我试图将列表传递给一个返回数据帧的函数mapply,然后do.callrbind它们一起用于一个数据帧.

这是一些虚拟代码:

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
    )
  )
Run Code Online (Sandbox Code Playgroud)

预期结果:具有2行3列的数据框.

实际结果:6x1矩阵.

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

MrF*_*ick 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
    )
  )
Run Code Online (Sandbox Code Playgroud)

或者只是使用Map()哪个总是返回一个列表

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