R - 创建数字列表

时间:2016-01-21 18:27:45

标签: r list recursion data-structures

我有一个定义了一些颜色的命名向量。

my_colors = c("C_T" = "salmon", "C_G" = "gold", "C_A" = "mediumseagreen", "T_G" = "lightseagreen", "T_C" = "royalblue1", "T_A" = "orchid1")

我想创建一个大小为N的列表,其中每个条目以数字命名并包含向量my_colors。列表的结构需要适合特定的格式,因为我将它提供给一些非常严格的函数。这里有一些代码可以手动生成所需的结果并展示必要的结构:

my_list = list("1" = my_colors, "2" = my_colors, "3" = my_colors, "4" = my_colors, "5" = my_colors, "6" = my_colors)
str(my_list)

我尝试编写一个循环来填充空列表

test_list = list()
for (i in 1:6) {
  test_list[i] = my_colors
}

但是这会返回抱怨长度的错误消息

我也试过

test_list = list()
for (i in 1:6) {
  test_list[[i]] = my_colors
}

test_list = list()
for (i in 1:6) {
  x = character(i) 
  test_list[x] = my_colors
}

但这两种方法都没有给我一个test_list,其结构与my_list相同。如何重新创建我用于以递归方式填充my_list的手动列表生成?

1 个答案:

答案 0 :(得分:1)

如果你从这开始(你的一项努力不应该抛出任何错误)

test_list = list()
for (i in 1:6) {
  test_list[[i]] = my_colors
}

......唯一缺少的是正确的名字。轻松修复:

names(test_list) <- 1:6

喔。现在我看到@PierreLafortune已经建议了。如果在添加.Names属性之前,您已经在这两个对象上运行all.equal,那么您会看到这个(可能是有用的)结果:

> all.equal(my_list, test_list)
[1] "names for target but not for current"

您也可以通过输入

查看底层结构
 dput(my_list)
 dput(test_list)

....并注意到“外部”属性存在差异。