2015-09-29 13 views
7

faydalı sonuç vermedi soru ve ?switch belgelerine Benim googling bana söylemez. nasıl bir switch deyiminde parametre olarak bir vektör geçmek yapmak

ben yön olduğunu varsayalım:

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

ve ben switch ifadesi için parametre olarak bu unsurlarla bir switch deyimi kullanmak istiyorum:

switch(input,cases) 

yukarıda olacak ancak çıkış şey olursa input=1 bu durumda çıktısı:

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

başka bir para metre hiçbir şey döndürmeyecek.

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

ben/ne olursa olsun anahtarı parametre olarak (bir liste/vektör geçebilir davranışı istiyorum: Ben açıkça gibi anahtar deyiminde vakaları yazarsanız ben istenilen davranışı elde tek yolu) ve aşağıdaki davranışı elde:

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

cevap

7

switch işlev, kalan bağımsız değişkenler arasında seçim yapmak için hangi bağımsız değişken belirten bir ifade alır. Dikkat ederseniz, bu, switch'u çağırırken vektörünüzü ayrı argümanlara ayırmanız gerektiği anlamına gelir. Sen as.list ile bir listeye vektör dönüştürme ve daha sonra do.call ile switch ayrı argümanlar olarak her liste elemanını geçerek bu elde edebiliriz:

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" 

Gerçekten basit vektör dizini kullanmayı üzerinde bunu yapmanın faydasını görmüyorum :

cases[1] 
# [1] "one" 
cases[2] 
# [1] "two" 
cases[3] 
# [1] "three" 
İlgili konular