if statement in R can only have one line?

依然范特西╮ 提交于 2019-11-29 02:52:11

问题


I was trying a tiny code with if statement, although it is very simple,but there is something I really confused here is the code

n<-857
while(n!=1){
if(n<=0)
 print("please input a positive integer")
else if(n%%2==0)
 n<-n/2
 print(n)
else
 n<-3*n+1
 print(n)
  }

as we see above,when running this code in R, there comes the error,but if I change the if statement like this

if(n<=0)
     print("please input a positive integer")
    else if(n%%2==0)
     n<-n/2
    else
     n<-3*n+1

it is ok ,my question is that can we only write one line under each judgement? if I want to do something more after each judge, what should I do ,just like this case, I want to change the value of n,but also want to display it, what should I do? thank you very much


回答1:


To be precise, this is not about lines but about statements. You can have the whole if else statement in one line:

> if (TRUE) 1 else 3
[1] 1

A statement will end at the end of the line (if complete), you can see that nicely in interactive mode if you enter the code line by line:

> if (TRUE) 
+ 1
[1] 1
> else
Fehler: Unerwartete(s) 'else' in "else" # error: unexpected 'else' in "else"
> 3
[1] 3

if can come in form if (condition) statement or if (condition) statement else other.statement, the interpreter assumes the first version is meant if the statement is complete after line 2 - in interactive mode it cannot sensibly wait whether an else appears next. This is different in sourced code - there it is clear with the next line which form it is.

Semicolons end statements as well:

> if (TRUE) 1; else 3
[1] 1
Fehler: Unerwartete(s) 'else' in " else"  # error: unexpected 'else' in "else"

But you can only have one statement in each branch of the condition.

> if (TRUE) 1; 2 else 3
[1] 1
Fehler: Unerwartete(s) 'else' in " 2 else" # error: unexpected 'else' in "2 else"

Curly braces group statements so they appear as one statement.

> if (TRUE) {1; 2} else 3
[1] 2



回答2:


You have to use {} for allows the if statement to have more than one line. Try this:

n<-857
while(n!=1){
  if(n<=0){
    print("please input a positive integer")
  }

  else if(n%%2==0){
    n<-n/2
    print(n)
  }
    else {
      n<-3*n+1
      print(n)
    }
}



回答3:


To group statements, surround them with curly braces as you've done with the while loop:

if(n<=0) {
     print("please input a positive integer")
} else if(n%%2==0) {
     n<-n/2
     print(n)
} else {
     n<-3*n+1
     print(n)
}

This will allow you to place multiple statements inside the if, the else if and the final else.




回答4:


while the direct answer is, as has been noted, to use curly braces;
it is worth adding that you can integrate the <- assignment operator into many functions.

In your specific case:

    print(n <- 3*n+1)

   ## instead of 
   #  n <- 3*n+1
   #  print(n)


note that using = here will NOT work. It must be <-




回答5:


Ever heard of curly barces?

n<-857
while(n!=1){
    if(n<=0) {
        print("please input a positive integer")
    } else if(n%%2==0) {
        n<-n/2
        print(n)
    } else {
        n<-3*n+1
        print(n)
    }
}


来源:https://stackoverflow.com/questions/15586566/if-statement-in-r-can-only-have-one-line

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!