web-dev-qa-db-ja.com

Rのステートメントが1行しか持てない場合?

私はifステートメントで小さなコードを試していましたが、それは非常に単純ですが、ここで本当に混乱していることがコードです

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)
  }

上記のように、このコードをRで実行するとエラーが発生しますが、ifステートメントを次のように変更すると

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

それは大丈夫です、私の質問は、各判断の下に1行しか記述できないということですか?各裁判官の後にさらに何かをしたい場合は、この場合と同様に、nの値を変更したいが、それを表示したい場合はどうすればよいですか?どうもありがとうございました

19
TOPMAD

正確には、これは行ではなくstatementsについてです。 _if else_ステートメント全体を1行で記述できます。

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

ステートメントは行の終わりで終了します(完了した場合)。コードを1行ずつ入力すると、インタラクティブモードでうまく表示されます。

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

ifif (condition) statementまたはif (condition) statement else other.statementの形式で提供されます。インタープリターは、ステートメントが行2の後に完了した場合、最初のバージョンが意図されていると想定します-インタラクティブモードでは、意図的に待つことができませんelseが次に表示されるかどうか。これはsourcedコードでは異なります。次の行でそれがどの形式であるかがわかります。

セミコロンもステートメントを終了します:

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

ただし、条件の各ブランチで使用できるstatementは1つだけです。

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

中括弧はステートメントをグループ化して、1つのステートメントとして表示します。

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

ifステートメントに複数行を含めるには、{}を使用する必要があります。これを試して:

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)
    }
}
12
Jilber Urbina

ステートメントをグループ化するには、whileループで行ったように、中括弧でステートメントを囲みます。

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)
}

これにより、ifelse if、および最後のelse内に複数のステートメントを配置できます。

10
NPE

直接的な答えは、すでに述べたように、中括弧を使用することです。
_<-多くの関数への代入演算子。

あなたの特定のケースでは:

    print(n <- 3*n+1)

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

=ここでは[〜#〜] not [〜#〜]機能します。それは違いない <-

1
Ricardo Saporta

カーリーバースを聞いたことがありますか?

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)
    }
}
0
Henrik