2017-02-12 8 views
0

次の例では、NAではなく加算の値を求めています。どうやってやるの?Rでは、NAではなく加算の値をどのように得ることができますか

set.seed(7354) 
a <- rbinom(1,1,.5) 
x <- ifelse(a==0, rexp(1, 1/50), NA) 
y <- ifelse(a==1, rexp(1, 1/100), NA) 
b <- ifelse(a==1, rbinom(1,1,.5), NA) 
z1 <- ifelse(b==1, rexp(1, 1/100), NA) 
z2 <- ifelse(b==0, rexp(1, 1/190), NA) 
s <- (1-a)*x + a *(y + b * z1 + (1-b) * z2) 

希望する出力はs = 968.8501です。

+0

0ではなくNAを使用する理由はありますか? –

+0

@HongOoi 'b'では0を使うことはできません.bがNAになると' s'もNAになります。 –

+0

@HongOoi 'b'はバイナリ変数で、' a = 1'の場合にのみ生成されます。 –

答えて

2

この

s = c((1-a)*x, a*y, a*b*z1, a*(1-b)*z2) 
s = sum(s, na.rm = T) 

これは、あなたは、NASを持つようになるんが、そうではありません項の合計には影響しません。

あなたはシミュレーションやブートストラップループの一部としてこれをやっている場合は
1
set.seed(7354) 

a <- rbinom(1,1,.5) 
x <- (a==0) * rexp(1, 1/50) 
y <- (a==1) * rexp(1, 1/100) 
b <- (a==1) * rbinom(1,1,.5) 
z1 <- (b==1) * rexp(1, 1/100) 
z2 <- (b==0) * rexp(1, 1/190) 

(1-a)*x + a *(y + b * z1 + (1-b) * z2) 
# [1] 968.8501 

、これはずっとifelse Sの束よりも速くなります。

+0

'a = 1'、' b'が値0または1を取るバイナリ変数である場合にのみ 'b'が生成されます。' a = 0'なら 'b'に0を、 'a = 0'の場合は' b 'に対してNAをとります。 –

+0

a = 0の場合、bの値は重要ではありません。なぜなら、その部分がゼロになるからです。 –

+0

必要なのは、bがNAではないということだけです。 –

関連する問題