私は簡単な質問があります:私は2つの機能を持っています。どちらももしそうでなければ
if(...) {expression}
if(...) {expression}
if(...) {expression}
代わりの
if(...) {expression}
else{
if(...) {expression}
else {expression}
}
しかし、両方の作品を1つだけ使用します。
最初のものは完璧に動作します:
test.1 <- function (y) {
if(y == 1){z <- 10}
if(y == 2){z <- 20}
if(y == 5){z <- 50}
return(z)
}
秒1は動作しません:
df.1 <- data.frame(A = 1:3)
df.2 <- data.frame(A = 4:6)
df.3 <- data.frame(A = 7:9)
test.2 <- function (num) {
x <- with(if(num == 1){df.1}
if(num == 2){df.2}
if(num == 3){df.3}, {sum(A)})
return(x)
}
私は第二の機能の仕事を得るためにあれば、他の表現を使用する必要があります。
test.2 <- function (num) {
x <- with(if(num == 1){df.1}
else {if(num == 2){df.2}
else {df.3}
}, {sum(A)})
return(x)
}
なぜこの複数のif文が最初のケースで動作するのですが、t彼は第二のもの!
あなたは、x < - の部分を使ってifを取りましたか? ifは、x < - withの部分で使用する変数を設定しますか? –
はい私はすでにそれを試しました。それは動作しますが、実際のコードではwith(...)部分に200行のコードがあります。つまり、このようにすれば、200行ではなく600行のコードが得られます。 ()内の適切な場所に。 –
基本的な問題は、2番目の関数が正しいR構文に似ていないということです。あなたが本質的に 'ith(num == 1){df.1} if(num == 2){df.2} if(num == 3){df.3}、{sum A)}) 'つまり、with()への2つの引数です。このコンテキストではガベージだけです。代わりに 'switch'を使用してください。とにかく値を返すようには設計されていないので、{}内のdata.framesは、私が考えることができる限り、 'x'に割り当てられるのではなく、印刷されます。 –