R语言中如何将循环变量用作列表元素名称?
问题解决:在R中通过循环变量访问列表的命名子列表
嗨,我完全懂你碰到的这个小坑——用for循环遍历字符串向量时,直接写testlist$i根本取不到对应的子列表,对吧?这是因为$操作符会把i当成字面量的元素名称,而不是循环变量里存储的字符串值,所以它一直在找名为"i"的元素,自然找不到啦。
给你两种简单的解决办法,都是利用R里支持变量索引的访问方式:
方法1:使用双括号[[ ]](推荐,提取单个元素)
双括号可以解析变量,直接取出对应名称的子列表内容,和你手动写testlist$a的效果完全一致:
# 先定义你的目标列表 testlist = list("a"=list(1,2,3),"b"=list(4,5,6),"c"=list(7,8,9)) # 正确的循环代码 for (i in c("a","b","c")){ print(testlist[[i]]) }
运行后会输出:
[[1]] [1] 1 [[2]] [1] 2 [[3]] [1] 3 [[1]] [1] 4 [[2]] [1] 5 [[3]] [1] 6 [[1]] [1] 7 [[2]] [1] 8 [[3]] [1] 9
方法2:使用单括号[ ](保留子列表结构)
如果你需要保留列表的层级结构(返回的是一个只包含目标子列表的新列表),可以用单括号:
for (i in c("a","b","c")){ print(testlist[i]) }
这种方式的输出会是:
$a $a[[1]] [1] 1 $a[[2]] [1] 2 $a[[3]] [1] 3 $b $b[[1]] [1] 4 $b[[2]] [1] 5 $b[[3]] [1] 6 $c $c[[1]] [1] 7 $c[[2]] [1] 8 $c[[3]] [1] 9
简单总结下:$只认字面量名称,而[[ ]]和[ ]可以解析变量,这就是解决问题的核心啦~
内容的提问来源于stack exchange,提问作者reaker
相关产品推荐
相关产品推荐

