使用For-Loop

时间:2017-03-03 06:45:25

标签: r list for-loop

library(xml2)
library(rvest)

datpackage <- paste0("dat",1:10)

for(i in 1:10){

  assign(datpackage[i], runif(2))

}

datlist <- list(dat1, dat2, dat3, dat4, dat5, dat6, dat7, dat8, dat9, dat10)

“datlist”是我想要的,但有更简单的方法来制作清单吗?

datlist2 <- for (i in 1:10) {
                list(paste0("dat",i))
}

datlist3 <- list(datpackage)
我已经尝试过datlist2和datlist3,但这与“datlist”不一样。

当我列出包含数千个数据的列表时,我该怎么办?

2 个答案:

答案 0 :(得分:3)

如果已创建对象,我们可以将pastemget一起使用

datlist <- mget(paste0("dat", 1:10))

但是,如果我们需要创建一个随机统一数字列表,

datlist <- replicate(10, runif(2), simplify = FALSE)

答案 1 :(得分:2)

为了创建包含随机数的列表,我还建议:

datlist2 <- lapply(vector("list", 10), function(x) {runif(2)})

基准

值得补充的是,lapply / vector方法似乎更快:

funA <- function(x) {replicate(10, runif(2), simplify = FALSE)}
funB <- function(x) {lapply(vector("list", 10), function(x) {runif(2)})}
microbenchmark::microbenchmark(funA(), funB(), times = 1e4)

结果

Unit: microseconds
   expr    min      lq     mean  median      uq      max neval cld
 funA() 24.053 27.3305 37.98530 28.6665 34.4045 2478.510 10000   b
 funB() 19.507 21.6400 30.37437 22.9235 27.0500 2547.145 10000  a 

Comparison - funA / funB