2012-04-30 13 views
1

我想使用的「被」呼這是很容易轉換成一個列表輸出...但名單仍然不予理睬我有時通過電話從環或lapply名單,R中

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

列表名稱必須是字符串;他們不能是數字。您需要將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]]) 
} 
+0

感謝您的快速響應!完美 – mmann1123

+0

@ user1034797 - 如果Joshua的回答正是您所需要的,請不要忘記通過點擊左側的複選標記來「接受」它。謝謝。 –

+3

另一種可能性可能是'for(我在名字(a)){...' – Marek

2

如果你只是遍歷列表中的元素做一些事情。每一個元素(我知道你例子簡體),再考慮功能的申請家庭裏面做只是這一點:

lapply(a, print) 

由於交互式輸入的內容是在lapply內部打印的,因此打印內容會打印兩次,然後打印返回值lapply

1

你可以遍歷列表,而索引:

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

這是很好的,除非你需要的元素的名稱。