在 R 中,增加一个列表和增加一个向量一样低效吗?

una*_*der 5 r

some_list <- list()

for (i in 1:1000) {
    some_list[[i]] <- i
}
Run Code Online (Sandbox Code Playgroud)

我想知道如果 some_list 是一个向量,这是否也同样低效。

JRR*_*JRR 5

答案似乎是肯定的。你可以对它进行基准测试。

f = function() {
  some_list <- list()
  for (i in 1:100000)
    some_list[[i]] <- i
}

g = function() {
  some_vector <- c()
  for (i in 1:100000)
    some_vector[i] <- i
}

h = function() {
  some_list <- vector("list", 100000)
  for (i in 1:100000)
    some_list[[i]] <- i
}

k = function() {
  some_vector <- integer(100000)
  for (i in 1:100000)
    some_vector[i] <- i
}

microbenchmark::microbenchmark(f(), g(), h(), k(), times = 10)
Unit: milliseconds
 expr       min        lq      mean    median        uq      max neval
  f() 27.723670 28.058052 31.043727 28.812197 33.973669 38.58484    10
  g() 20.699626 21.235849 23.029765 21.531695 26.419720 28.04681    10
  h()  7.056399  7.151585  7.887856  7.356198  7.936945 10.80190    10
  k()  6.025570  6.076456  7.194970  6.408183  7.808957 11.00644    10
Run Code Online (Sandbox Code Playgroud)