2

我正在尝试使用“按”调用的输出,该调用很容易转换为列表……但有时列表仍然不符合我的要求

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
4

3 回答 3

5

列表名称必须是字符串;它们不能是数字。您需要转换i为字符串。您可以使用as.characterorpaste并且您可以在循环开始时或在循环内部执行它。

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]])
}
于 2012-04-30T19:10:57.340 回答
2

如果您只是循环遍历列表的元素以对每个元素执行某些操作(我意识到您的示例已简化),那么请考虑执行此操作的 apply 系列函数:

lapply(a, print)

交互输入时会打印两次,因为它们打印在 内部lapply,然后lapply打印返回值。

于 2012-04-30T19:37:22.837 回答
1

您可以在没有索引的情况下遍历列表:

for (ai in a) {
    print(ai)
}

除非您需要元素的名称,否则这很好。

于 2012-04-30T19:37:32.520 回答