强制mapply返回列表?

时间:2012-01-04 20:36:58

标签: r mapply

假设我有一个创建数据帧的函数。我想用不同的输入值运行该函数,然后将结果整合到一个大数据框中,如下所示:

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正在返回列表矩阵。我期待它返回一个数据框列表。我该怎么办?

2 个答案:

答案 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)