假设我有一个创建数据帧的函数.我想用不同的输入值运行该函数,然后将结果整合到一个大数据框中,如下所示:
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))
Run Code Online (Sandbox Code Playgroud)
我的CreateDataFrame函数有三个参数.在上面的示例中,第二个和第三个参数保持不变.我想像上面一样做,但每次调用都会改变第二个和第三个参数.我想我必须使用mapply,像这样:
mapply("CreateDataFrame", type=toupper(letters[1:5]), n=10, n.true=8:4)
Run Code Online (Sandbox Code Playgroud)
我遇到了麻烦,因为mapply没有返回列表,这阻止了我运行do.call(rbind, mapply(...)).我怎么能得到一个数据框,就像我在顶部的例子中所做的那样?
看起来mapply正在返回一个列表矩阵.我期待它返回一个数据框列表.我该怎么办?
Jos*_*ien 29
为了得到data.frames作为返回值的列表,设置mapply的SIMPLIFY参数FALSE.(它的默认值是TRUE,它将函数指向"尝试将结果减少为向量,矩阵或更高维数组" - 正如您所经历的那样).
res <- mapply("CreateDataFrame", type=toupper(letters[1:5]), n=10, n.true=8:4,
SIMPLIFY = FALSE)
identical(class(res), "list")
[1] TRUE
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用地图功能。它基本上是将SIMPLIFY设置为FALSE的映射。
Map("CreateDataFrame", type=toupper(letters[1:5]), n=10, n.true=8:4)
Run Code Online (Sandbox Code Playgroud)