1

我有一个包含列名和行名的数据矩阵,如下所示:

     Col1  Col2  Col3 ...
Row1 0.1   0.2   0.4  ...
Row2 1.8   13.1  0.2  ...
Row3 8.0   9.2   9.1  ...
...  ...   ...   ...

我有一个包含多个列标题子集列表的对象,例如:

$list1
 [1] "Col1"       "Col2"      "Col13"     "Col56"     "Col267"    "Col300"
 [7] "Col301"     

$list2
 [1] "Col4"       "Col6"      "Col7"      "Col54"     "Col199"     "Col203"

...

我想抓取原始矩阵的一个子集,其中只有每个列表中的列。如果我明确指定列标题,似乎我可以做到,例如:

example.matrix[,c("Col4","Col6","Col7","Col54","Col199","Col203")]

但是,如果我创建一个与该字符向量匹配的数据对象,它就不起作用:

test <- as.character(example.col_list[1])
          #^this prints to terminal as 
          #"c("Col4","Col6","Col7","Col54","Col199","Col203")" 
example.matrix[,test]

这给出了一个Error: subscript out of bounds. 在玩弄了这个变化之后,使用子集函数,试图找到列的索引(使用 which 和 match 函数),似乎没有任何效果。这一切似乎都取决于无法像我认为的那样解释每个列名列表。我知道我可能遗漏了一些简单的东西,但经过长时间的努力,很难在 SO 或 Google 搜索上找到答案,有什么想法吗?

如果有帮助,我这样做是为了为每个列子集制作一个数字,并且有大约 10k 个子集,因此手动解决方法是不可行的。我需要以某种方式嵌套这是一个循环或函数内。谢谢!

4

1 回答 1

2

您不想构建一个 R 调用,该调用将作为字符串放入“[”中,然后需要对其进行解析和评估。您想要放置一个本身就是字符向量的对象。试试这个:

test <- example.col_list[[1]]  # note "[[" instead of "["

example.matrix[ , test]
于 2012-08-30T19:10:05.740 回答