25

非常に単純ですが、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の値を変更したいが、それを表示したい場合はどうすればよいですか?どうもありがとうございます

4

6 に答える 6

56

正確には、これは行についてではなく、ステートメントについてです。ステートメント全体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はorの形式で来ることができます。インタプリタは、ステートメントが 2 行目以降で完了すると、最初のバージョンが意味されていると想定します。対話モードでは、次にif (condition) statement else other.statementan が現れるかどうかを賢明に待つことはできません。elseこれはsourced コードでは異なります。次の行で、それがどの形式であるかが明確になります。

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

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

ただし、条件の各分岐には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
于 2013-03-23T13:38:08.450 に答える
13

を使用する必要があります。ステートメントに複数の行を含める{}ことができます。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)
    }
}
于 2013-03-23T12:08:32.737 に答える
11

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

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

于 2013-03-23T12:08:28.910 に答える
1

直接の答えは、前述のように、中括弧を使用することです。代入演算子を多くの関数に
統合できることを追加する価値があります。<-

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

    print(n <- 3*n+1)

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


=ここで使用しても機能しないことに注意してください。それは違いない<-

于 2013-03-23T13:37:41.500 に答える
-1

巻き毛のバースについて聞いたことがありますか?

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)
    }
}
于 2013-03-23T12:09:23.903 に答える