如何从 sapply 函数获取数据框?

How to get a data frame from sapply function?

我正在使用 sapply() 生成 30 个随机游走模拟,并使用我自己的函数 levy.walk.flights()

simmulations=30
granMAT <- sapply(1:simmulations, function(i){
   a <- levy.walk.flights()[[1]]
   cbind(a,rep(i, length(a[,1])))
})

对象 a 收到一个 data.frame 有 2 列:x, y;加上在下一行代码中绑定的 ID 列。

此代码完美运行并生成所有 30 个模拟。唯一的问题是 sapply() return 是一个包含 30*3 (90) 个数组的列表。请参阅具有 3 个模拟的 str(granMAT) 示例。

List of 9
$ : num [1:5748] 0 0.00357 0.0074 0.01071 0.01418 ...
$ : num [1:5748] 0 0.135 0.28 0.406 0.537 ...
$ : int [1:5748] 1 1 1 1 1 1 1 1 1 1 ...
$ : num [1:2434] 0 -0.131 -0.261 -0.385 -0.527 ...
$ : num [1:2434] 0 -0.048 -0.0955 -0.1412 -0.1933 ...
$ : int [1:2434] 2 2 2 2 2 2 2 2 2 2 ...
$ : num [1:2301] 0 -0.0887 -0.1829 -0.276 -0.364 ...
$ : num [1:2301] 0 0.0941 0.1939 0.2927 0.386 ...
$ : int [1:2301] 3 3 3 3 3 3 3 3 3 3 ...
- attr(*, "dim")= int [1:2] 3 3
- attr(*, "dimnames")=List of 2
..$ : chr [1:3] "x" "y" "rep(i, length(a[, 1]))"
..$ : NULL`

我想要 sapply() 到 return 一个 data.frame 具有 3 列:x、y、ID。所有数据都绑定在这 3 列下方。我尝试了 do.call() 和几个 library(plyr) 函数,但我不知道哪个函数允许我这样做。

感谢您的帮助!

simmulations=30
granMAT <- sapply(1:simmulations, function(i){
   a <- levy.walk.flights()[[1]]
   cbind(a,rep(i, length(a[,1])))
}) %>% rbind_all 

rbind_all 是 dplyr 的简写函数,等于 do.call("rbind", list)。将 sapply 的结果通过管道传输到 rbind_all,意味着它将获取列表并将所有行绑定在一起,返回 data.frame。