2015-09-29 38 views
7

我對該問題的搜索結果沒有返回有用的結果,?switch的文檔沒有告訴我該怎麼做,所以我希望我能在這裏得到這個答案。如何將一個向量作爲參數傳遞到switch語句中

說我有一個向量:

cases<- c("one","two","three") 

,我想使用switch語句用這些元素作爲switch語句的參數:

switch(input,cases) 

以上只會輸出任何東西,如果在這種情況下,它將輸出:

switch(1,cases) 
# [1] "one" "two" "three" 

任何其他段落儀表不會返回任何東西。我能獲得所需的行爲的唯一方法是,如果我明確地鍵入switch語句中的情況下這樣:

switch(2,"one","two","three") 
# [1] "two" 

我想,我可以通過一個列表/矢量/不管在開關參數(行爲)並且實現以下行爲:

switch(2,cases) 
# [1] "two" 

回答

7

switch函數接受指示從剩餘的函數的自變量來選擇哪個參數數量的表達式。正如你注意到的,這意味着當調用switch時,你需要將你的向量分解成單獨的參數。你可以通過你的載體與as.list轉換成一個列表,然後通過每個列表元素作爲單獨的參數switchdo.call實現這一目標:

do.call(switch, c(1, as.list(cases))) 
# [1] "one" 
do.call(switch, c(2, as.list(cases))) 
# [1] "two" 
do.call(switch, c(3, as.list(cases))) 
# [1] "three" 

我實在不明白這樣做的好處比使用簡單的向量索引:

cases[1] 
# [1] "one" 
cases[2] 
# [1] "two" 
cases[3] 
# [1] "three" 
相關問題