2014-10-01 3 views
-1

Я застрял с if ... else в R:Проблема с, если ... еще строки в R

Version <- function(a,b,data) { 

    version1=a*b 
    version2=a+b 
    version3=a-b 

    if (data==version1) { 

    a=(a*b) 
    return(a) 

    } else if (data==version2){ 

    y=(a+b) 
    return(y) 

    } else { 

    (data==version3) 
    z=(a-b) 
    return(z) 

    } 

} 

Проблема заключается в том: Error in Version(1, 2, version2) : object 'version2' не найдено

EDIT:

Я извиняюсь за не прояснить мою просьбу.

Я пытаюсь выполнить задачу в статусе else/if statemant.

Я могу попросить «версию» в функции, но могу выбрать, какую версию я бы хотел использовать (version1, version2 или version3). Если я набираю версию5 или что-то совершенно другое, она должна остановить exectuion, и я должен получить сообщение об ошибке.

ответ

2

Вы должны использовать switch:

Version <- function(a,b,test){ 
    switch (tolower(test), 
      "version1" = a*b, 
      "version2" = a+b, 
      "version3" = a-b, 
      "unknown selector") 
} 

Version(2, 3, "Version1") 
#[1] 6 

Version(2, 3, "verSion2") 
#[1] 5 

Version(2, 3, "Version5") 
#[1] "unknown selector" 
+0

Я думаю, что я такой новичок, что если меня смущает то, что вы там делали. Но спасибо вам в любом случае! – user3785898

+0

@ user3785898 См. Мое редактирование. – Roland

+0

Да, я не знал, что эти два решения разные. Я немного смущен этими утверждениями If..Else. Как выглядит линия с If..Else? Переключатель является базовым быстрым Если ..Else? И есть ли для каждой буквы? – user3785898

1

Другой подход без switch и ifelse:

Version <- function(a, b, test) 
    match.fun(c("*", "+", "-")[match(test, c("version1", "version2", "version3"))])(a, b) 

Version(3, 4, "version1") 
# [1] 12 
Version(3, 4, "version2") 
# [1] 7 
Version(3, 4, "version3") 
# [1] -1 
+0

+1, но если у них есть проблемы с пониманием 'switch', они не поймут этого. – Roland

Смежные вопросы