2015-10-31 2 views
0

Самый простой сценарий когда-либо, так почему я получаю сообщение об ошибке:если еще ошибка: неожиданный «}» в «}» в R

> x <- -5 
> if(x > 0){ 
+  print("Non-negative number") 
+ } 
> else{ 
Error: unexpected 'else' in "else" 
>  print("Negative number") 
[1] "Negative number" 
> } 
Error: unexpected '}' in "}" 

Если я просто положить еще после}, то нет никаких проблем ,

> x <- -5 
> if(x > 0){ 
+  print("Non-negative number") 
+ } else{ 
+  print("Negative number") 
+ } 
[1] "Negative number" 

Вещь Я всегда писал это первым способом без проблем; я схожу с ума?

+2

Пожалуйста, отметьте вопрос на языке программирования, который вы используете. Это, вероятно, артефакт любой оболочки/консоли, в которую вы вводите команды. –

+0

То же самое: http://stackoverflow.com/questions/23944698/error-unexpected-in-if-print-else-print –

ответ

5

Если вы вводите код в интерактивном режиме, R считает, что предложение if выполняется, как только он видит первую скобку. Затем он «думает», что else запускает новый оператор, который не разрешен. От help("else"):

In particular, you should not have a newline between ‘}’ and ‘else’ to avoid a syntax error in entering a ‘if ... else’ construct at the keyboard or via ‘source’. For that reason, one (somewhat extreme) attitude of defensive programming is to always use braces, e.g., for ‘if’ clauses.

Если вы используете R CMD BATCH этот будет работы. Можно также использовать скобки, как это было предложено в файле справки:

x <- -5 
{ if(x > 0){ 
    print("Non-negative number") 
    } 
    else { 
    print("Negative number") 
    } 
} 

или просто включить else на той же линии, что и крупным кронштейне.

+0

они помещают конструкции if/else внутри тела функций как один из способов заставить их быть внутри блока (что можно сделать более минимально, помещая их в() или {} ...) Но они отвечают в основном на один и тот же вопрос. Наверное, я рад, что мой ответ добавляет немного. –

1

Это не ваша вина. Так работает консоль R! Когда вы вводите закрывающий кронштейн, консоль ожидает, что не будет никаких предложений else if или else, поэтому он выполняет предложение if.

Обойти это можно заключить все if.. else положение в скобках, например:

x <- -5 
{ 
    if(x > 0){ 
    print("Non-negative number") 
    } 
    else{ 
    print("Negative number") 
    } 
} 
+1

Спасибо, ребята, на размышлении я практически всегда пишу мои инструкции if else внутри циклов или внутри функции, и поэтому проблема для меня не возникала. – Jimmy

+0

Все в порядке, я рад помочь, и я также рад, что вы решили свою проблему. – nikaltipar

0

Из этого Documentation говорится, что вам нужно ввести его таким образом.

It is important to note that else must be in the same line as the closing braces of the if statements.

Таким образом, даже если вы не находитесь в интерактивном режиме, могут возникнуть проблемы.

+0

как это отличается от предыдущих двух ответов ...? (также, ссылка не работает) –

+0

http://www.programiz.com/r-programming/if-else-statement –

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