使用列表填充列表(复制,lapply)

时间:2014-12-29 13:36:02

标签: r

我应该如何生成已知大小的列表列表?

目前我这样做。

create_scout_bees <- function(search_space, num_scouts){
  gen_bee <- function(unused, sear_spac){
    create_random_bee(sear_spac)
  }
  bees <- lapply(1:num_scouts, gen_bee, search_space)
  #bees <- replicate(num_scouts, create_random_bee(search_space))
  cat('\nclass of bees is:',class(bees),'\n')
  bees
}

其中create_random_bee(sear_spac)返回return(list(vector=random_vector(search_space)))。这似乎太复杂了。我找到了replicate函数(请参阅代码中的注释)。但它不会返回相同的东西。说实话,我不完全确定它的回报。

lapply选项似乎返回列表列表

[[1]]
[[1]]$vector
[1] -3.772477 -4.178604


[[2]]
[[2]]$vector
[1] -1.237291 -2.430769


[[3]]
[[3]]$vector
[1] -2.211511 -1.352074


[[4]]
[[4]]$vector
[1]  4.102391 -1.437620


[[5]]
[[5]]$vector
[1] -0.1355444 -2.0270074

复制版本返回一个列表

$vector
[1] 3.780779 3.588892

$vector
[1] -4.290371  4.098709

$vector
[1]  1.051525 -3.374406

$vector
[1] -0.4593861 -4.8412850

$vector
[1]  2.164383 -4.903347

我可以索引两个返回的值。但第二种选择似乎只是一个列表,其中包含5个带有相同键的矢量类型的元素。当按键访问时,它返回第一个元素。 如何生成已知大小的列表列表?

1 个答案:

答案 0 :(得分:0)

你可以尝试

replicate(5, list(vector=rnorm(2)), simplify=FALSE)
# [[1]]
#[[1]]$vector
#[1] -1.5239454 -0.1326934


#[[2]]
#[[2]]$vector
#[1] -1.4369404  0.3701259


#[[3]]
#[[3]]$vector
#[1]  0.3251298 -1.4289498


#[[4]]
#[[4]]$vector
#[1]  0.8346002 -0.2974959


#[[5]]
#[[5]]$vector
#[1]  0.4581858 -0.8066517