2016-04-10 22 views
1

kullanıyorum 600 uzunluk örneği oluşturulan:İfadeler kullanıldığında r'de iki değişken nasıl artırılır?

x <- rnorm(600, mean = 30, sd = 10) 

ve sonra kullanarak başka 600 uzunluk listesini yaptı:

y = ((x-30)/10) 

ve planımı olduğunu var ise y olmadığını test ifadeleri den büyük 1,96 ve -y 1,96 daha küçüktür ve bu gerçekleşirse o zaman 1 ile değişken a artırır ve bu olmazsa o zaman 1.

tarafından değişken b artırmak eğer fo denedi llowing şeyler: inc

a = 0 
b = 0 

ifelse(y > 1.96, inc(a) <- 1, inc(b) <- 1) 
ifelse(-y < -1.96, inc(a) <- 1, inc(b) <- 1) 

Hata (a) <-1: fonksiyonunu bulamadık "inc < -" inc Hatası (b) < - 1: işlevi bulamadık "inc < - "bir < + içinde

ifelse(y > 1.96, '+'(a) <- 1, '+'(b) <- 1) 
ifelse(-y < -1.96, '+'(a) <- 1, '+'(b) <- 1) 

Hata - 1: bulamadı fonksiyonunu "+ < -" Hatası + B <-1: işlevi bulamadık "+ < -"

if (y > 1.96) { 
    a = a + 1 
} 
if (-y < -1.96) { 
    a = a + 1 
} else{ 
    b = b + 1 
} 

uyarı mesajı (y> 1.96) { olarak ise: durumu vardır uzunluğu> 1 ve sadece ilk eleman

Bu neredeyse çalıştı

ifelse(y > 1.96, a <- a + 1, b <- b + 1) 
ifelse(-y < -1.96, a <- a + 1, b <- b + 1) 
kullanılacaktır ama bana hepsi 1'lerin bir çıktı veren ve:

a 
    # [1] 1 
    b 
    # [1] 1 

Değişkenleri nasıl artırabilirim veya yanlışlarımı neden yapıyorum?

+2

y> 1.96 ise -y olmalıdır <-1.96. R vektörü bu şekilde toplanır (y> 1.96) vb. –

cevap

5

Bu tür bir hesaplama için ifelse() kullanmaktan kaçının. Bu durumda, TRUE/FALSE değerlerinin bir vektörünü elde ederek ve daha sonra TRUE değerlerinin toplamı ile R'nin vektörizasyon özelliklerini (örn. Sadece R vektörlerinde "skaler" yoktur) kullanmak daha iyidir.

# Make the data 
set.seed(1337) 
x = rnorm(600, mean = 30, sd = 10) 

y = ((x-30)/10) 

# Get Indicators (T/F) 
v1 = y > 1.96 

v2 = y < -1.96 

# Sum over w.r.t to true cases 
a = sum(v1) + sum(v2) 

# Handle the false cases without resumming. 
b = 2*length(y) - a 

Ayrıca burada uygun iki tarafı sayım sonucuna varmak için y < -1.96 kullanmayı tercih.