所以,我试图将列表传递给一个返回数据帧的函数mapply,然后do.call将rbind它们一起用于一个数据帧.
这是一些虚拟代码:
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矩阵.
关于我在这里做错了什么的想法?
使用时,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)