在循环或lapply中按名称调用列表,在R中

时间:2012-04-30 19:07:14

标签: r list call lapply

我正在尝试使用“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

3 个答案:

答案 0 :(得分:4)

列表名称必须是字符串;他们不能成为数字。您需要将i转换为字符串。您可以使用as.characterpaste,也可以在循环开始或内部进行。

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)
}

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