【问题标题】:Populating a list with lists (replicate, lapply)用列表填充列表(复制,lapply)
【发布时间】:2014-12-29 13:36:02
【问题描述】:

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

目前我就是这样做的。

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 个具有相同键的向量类型元素的列表。通过键访问时,它返回第一个元素。 如何生成已知大小的列表列表?

【问题讨论】:

  • 谢谢@akrun。如果您将此添加为答案,那么我接受它。否则我会在一段时间后删除问题。
  • 好的,我将其添加为答案

标签: r


【解决方案1】:

你可以试试

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

【讨论】:

    猜你喜欢
    • 2014-07-06
    • 1970-01-01
    • 1970-01-01
    • 2015-04-24
    • 1970-01-01
    • 2020-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多