所以,我正在尝试将列表传递给通过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矩阵。
关于我在这里做错了什么想法?
答案 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
)
)