我正在尝试使用“by”调用的输出,该调用很容易转换为列表...但是列表仍然有时候无视我
a = list('1'=c(19,3,4,5), '4'=c(3,5,3,2,1,6), '8'=c(1,3))
for (i in c(1,8,4)){
# would like to do something like this
a[["i"]] # calling list elements by name rather than #
}
#ideally the output would be something like this
>19,3,4,5
>1,3
>3,5,3,2,1,6
答案 0 :(得分:4)
列表名称必须是字符串;他们不能成为数字。您需要将i
转换为字符串。您可以使用as.character
或paste
,也可以在循环开始或内部进行。
a = list('1'=c(19,3,4,5), '4'=c(3,5,3,2,1,6), '8'=c(1,3))
# convert inside loop
for (i in c(1,8,4)) {
print(a[[as.character(i)]])
}
# convert at initiation
for (i in as.character(c(1,8,4))) {
print(a[[i]])
}
答案 1 :(得分:2)
如果您只是循环遍历列表的元素以对每个元素执行某些操作(我意识到您的示例已经简化),那么请考虑执行此操作的apply函数系列:
lapply(a, print)
交互式输入时,事物会被打印两次,因为它们打印在lapply
内,然后打印lapply
的返回值。
答案 2 :(得分:1)
你可以在没有索引的情况下遍历列表:
for (ai in a) {
print(ai)
}
除非你需要元素的名称,否则这很好。