エグゼクティブサマリー:
R が else 節がその上の if 節に属していることを知る方法は 2 つしかありません。
- if...else ステートメント全体 (およびおそらく他のステートメントも) は中括弧で囲まれています。
- else という単語は、if 句の末尾と同じ行に表示されます。
証拠:
上記の議論は私を助けてくれましたが、役に立つ質問を提供できることを願っています. はい、それは正しいです
f <- function (exp)
if (exp)
1
else
2
R が 1 を超えて読み続けることができないため、従来Error: unexpected 'else' in "else"
のメッセージで失敗します。R が 1 を超えて読み続けるようにするための 2 つの方法が正しく提供されています。
f <- function (exp) {
if (exp)
1
else
2
}
と
f <- function (exp) if (exp) 1 else 2
しかし、まだ言及されていない 3 番目の方法がありelse
ます。したがって、R は 1 を超えて読み続けることを知っているため、以下も機能します。
f <- function (exp)
if (exp)
1 else
2
重要なポイントは、関数の本体全体を中括弧にするかelse
、if 句の最後と同じ行に発生するようにして、R が読み続けることを認識できるようにすることだと思います。そのため、1 行のソリューションが機能します。これが機能する理由でもあります。
f <- function (exp)
if (exp) {
1
} else
2
しかし、これは失敗します:
f <- function (exp)
if (exp) {
1
}
else
2
関数本体のより標準的なブレースを使用すると、これも機能します。
f <- function (exp) {
if (exp) {
1
}
else
2
}
しかし、関数を構築しているかどうかは、重要な問題です。重要なのは、ブレースと の場所だけですelse
。したがって、これらは次のように機能します。
{
if (exp) {
1
}
else
2
}
if (exp) {
1
} else
2
しかし、これは失敗します:
if (exp) {
1
}
else
2
上の私のアサーション 1 を示すために、これは機能します。
{
x <- 4
if (exp)
1
else
2
}