2014-12-03 2 views
6

R 프로그래밍에 익숙하지 않습니다. 숫자 객체에 switch 문을 사용할 수 있는지 여부는 알 수 없습니다. 숫자 개체에 대한 switch 문이 작동하지 않습니다.

내 코드,
test.R:4:18: unexpected '=' 
3:   switch(x, 
4:     1= 
        ^

이 문제를 좀 도와주십시오 나는이 오류가 발생했습니다

myfunction <- function() { 
    x <- 10 
    switch(x, 
     1={ 
      print("one") 
     }, 
     2={ 
      print("two") 
     }, 
     3={ 
      print("three") 
     }, 
     { 
      print("default")  #Edited one.. 
     } 
    ) 
} 

이다.

답변

6
myfunction <- function(x) { 
         switch(x, 
           print("one"), 
           print("two"), 
           print("three"))} 

myfunction(1) 
## [1] "one" 

편집 : 코멘트에 언급 된 바와 같이,이 방법은 입력되는 값을 평가 되지 않고 인덱스로 사용. 따라서 귀하의 경우에는 작동하지만 진술이 재정렬 될 경우 작동하지 않습니다 (더 나은 접근을 위해 @Joshs 대답 참조).

어느 경우에도 switch은이 경우에 사용할 올바른 함수라고 생각하지 않습니다. 이는 대체로 서로 다른 옵션간에 전환하기위한 것이기 때문에 당신이 기본적으로 동일한 기능을 반복적으로 실행하고 있기 때문입니다. 따라서 각 대안에 대한 추가 문장을 추가하는 것은 너무 많은 작업처럼 보입니다 (예를 들어, 20 개의 다른 숫자를 표시하려면 20 개의 다른 문장을 써야합니다).

대신

, 당신은 또한 switch를 사용하여 피할 수, 당신은

library(english) 
myfunction2 <- function(x) { 
       ifelse(x %in% 1:3, 
         as.character(as.english(x)), 
         "default")} 
myfunction2(1) 
## [1] "one" 
myfunction2(4) 
## [1] "default" 

대안 ifelse 문에 정의 할 수만큼 숫자를 표시 할 수 있도록 할 english 패키지를 시도해 볼 수도 있습니다 (반드시 권장 아니지만) match

myfunction3 <- function(x) { 
    df <- data.frame(A = 1:3, B = c("one", "two", "three"), stringsAsFactors = FALSE) 
     ifelse(x %in% 1:3, 
      df$B[match(x, df$A)], 
      "default")} 
myfunction3(1) 
## [1] "one" 
myfunction3(4) 
## [1] "default" 
+0

어떻게이 switch 문에 대한 기본을 추가하는 말해 괜찮다면? – Venkatesh

+0

대신에'function (x)'대신'function (x = 1)'을 실행하십시오. 모든 이름을 지우고'switch (x, {print ("one")}, {print ("two")}, {print ("three")} )'(wihtout 이름) MrFlick 언급대로 –

+0

나는 내 질문에 분명하지 않았다고 생각해. 그 죄송합니다. 스위치 케이스에 대한 기본 사례를 제공하고 싶습니다. 어떻게해야합니까? – Venkatesh

2

를 사용하여 나는 ?switch 도움말 페이지를 읽고 건의 할 것입니다. 이것은 꽤 잘 거기에 설명되어 보인다. R의 이름은 숫자가 될 수 없습니다. 즉, c (1 = 5)는 허용되지 않으며 f (1 = 5, 2 = 5)도 허용되지 않습니다. 당신이 정말로 1, 2 또는 3을 가지고 있다면, 당신은

switch(x, 
    {print("one")}, 
    {print("two")}, 
    {print("three")} 
) 

특히 (임의 처리 할 수있는 능력을

8

switch의 기능을 최대한 활용하기 (숫자 값에 대한 이름을 생략)합니다 값이 최종 기본값 인 을 사용하여 1,2,3, ... 이외의 숫자를 처리하는 경우 입력을 문자열로 변환하는 것이 좋습니다. 나는 같은 것을 할 것

:

myfunction <- function(x) { 
    switch(as.character(x), 
     "1" = print("one"), 
     "2" = print("two"), 
     "3" = print("three"), 
     print("something other than 'one', 'two', or 'three'")) 
} 

myfunction(1) 
# [1] "one" 
myfunction(345) 
# [1] "something other than 'one', 'two', or 'three'" 
관련 문제