假设我有一个创建数据帧的函数。我想用不同的输入值运行该函数,然后将结果整合到一个大数据框中,如下所示:
CreateDataFrame <- function(type="A", n=10, n.true=8) {
data.frame(success=c(rep(TRUE, n.true), rep(FALSE, n - n.true)), type=type)
}
df <- do.call(rbind, lapply(toupper(letters[1:5]), CreateDataFrame))
我的CreateDataFrame函数有三个参数。在上面的示例中,第二个和第三个参数保持不变。我想像上面一样做,但每次调用都会改变第二个和第三个参数。我想我必须使用mapply,就像这样:
mapply("CreateDataFrame", type=toupper(letters[1:5]), n=10, n.true=8:4)
我遇到了麻烦,因为mapply没有返回列表,导致我无法运行do.call(rbind, mapply(...))
。我怎样才能得到一个数据框,就像我在顶部的例子中所做的那样?
看起来mapply正在返回列表矩阵。我期待它返回一个数据框列表。我该怎么办?
答案 0 :(得分:27)
要获取data.frames列表作为返回值,请将mapply
的{{1}}参数设置为SIMPLIFY
。 (它的默认值是FALSE
,它指示函数“尝试将结果减少为向量,矩阵或更高维数组” - 正如您所经历的那样。
TRUE
答案 1 :(得分:4)
另外,您可以使用Map功能。它基本上与SIMPLIFY设置为FALSE。
Map("CreateDataFrame", type=toupper(letters[1:5]), n=10, n.true=8:4)