2014-04-26 12 views
21

kullanılacaktır:durum uzunluğu> 1 sahiptir ve sadece ilk eleman bir dataframe, gezi

for (i in 1:nrow(trip)) { 
    if(trip$Ref.y=='G' & trip$Variant.y=='T'|trip$Ref.y=='C' & trip$Variant.y=='A') { 
     trip[i, 'mutType'] <- "G:C to T:A" 
    } 
    else if(trip$Ref.y=='G' & trip$Variant.y=='C'|trip$Ref.y=='C' & trip$Variant.y=='G') { 
     trip[i, 'mutType'] <- "G:C to C:G" 
    } 
    else if(trip$Ref.y=='G' & trip$Variant.y=='A'|trip$Ref.y=='C' & trip$Variant.y=='T') { 
     trip[i, 'mutType'] <- "G:C to A:T" 
    } 
    else if(trip$Ref.y=='A' & trip$Variant.y=='T'|trip$Ref.y=='T' & trip$Variant.y=='A') { 
     trip[i, 'mutType'] <- "A:T to T:A" 
    } 
    else if(trip$Ref.y=='A' & trip$Variant.y=='G'|trip$Ref.y=='T' & trip$Variant.y=='C') { 
     trip[i, 'mutType'] <- "A:T to G:C" 
    } 
    else if(trip$Ref.y=='A' & trip$Variant.y=='C'|trip$Ref.y=='T' & trip$Variant.y=='G') { 
     trip[i, 'mutType'] <- "A:T to C:G" 
    } 
} 
:

> head(trip.mutations) 
    Ref.y Variant.y 
1 T  C 
2 G  C 
3 A  C 
4 T  C 
5 C  A 
6 G  A 

bu kuralları takip eden üçüncü bir sütun, mutType, eklemek istediğiniz

ama hata alıyorum:

Warning messages: 
1: In if (trip$Ref.y == "G" & trip$Variant.y == "T" | trip$Ref.y == ... : 
    the condition has length > 1 and only the first element will be used 

benim mantıksal ifadeler vektörleri üreten olmalı sanmıyorum, ama belki ben Bir şey eksik.

mutType 
A:T to G:C 
G:C to C:G 
A:T to C:G 
A:T to G:C 
G:C to T:A 
G:C to A:T 

kimse burada neyin yanlış olduğunu görebiliyor

: gezi $ mutType bu benzeyen sonunda gerekir? Gerekir || yerine | belki? if sadece

uzunluğunda 1'in bir logical vektörü değerlendirmek çünkü

cevap

36

Sen Belki & (|) ve && (||) arasındaki farkı kaçırmak hatası alıyorum. kısa versiyonu öğeye göre çalışır ve daha uzun versiyonu her vektör, örneğin yalnızca ilk elemanını kullanır: sgibb gibi

mut1 <- trip$Ref.y=='G' & trip$Variant.y=='T'|trip$Ref.y=='C' & trip$Variant.y=='A' 
trip[mut1, "mutType"] <- "G:C to T:A" 
+0

Teşekkür: Burada

sorunu çözmek için başka bir yoludur – soosus

2

söyledi:

c(TRUE, TRUE) & c(TRUE, FALSE) 
# [1] TRUE FALSE 

# c(TRUE, TRUE) && c(TRUE, FALSE) 
[1] TRUE 

Sen hiç if deyimi gerekmez Eğer bir sorun varsa, bununla hiçbir ilgisi yoktu | veya || hile yok

for (i in 1:nrow(trip)) { 
    if(trip$Ref.y[i]=='G' & trip$Variant.y[i]=='T'|trip$Ref.y[i]=='C' & trip$Variant.y[i]=='A') { 
    trip[i, 'mutType'] <- "G:C to T:A" 
    } 
    else if(trip$Ref.y[i]=='G' & trip$Variant.y[i]=='C'|trip$Ref.y[i]=='C' & trip$Variant.y[i]=='G') { 
    trip[i, 'mutType'] <- "G:C to C:G" 
    } 
    else if(trip$Ref.y[i]=='G' & trip$Variant.y[i]=='A'|trip$Ref.y[i]=='C' & trip$Variant.y[i]=='T') { 
    trip[i, 'mutType'] <- "G:C to A:T" 
    } 
    else if(trip$Ref.y[i]=='A' & trip$Variant.y[i]=='T'|trip$Ref.y[i]=='T' & trip$Variant.y[i]=='A') { 
    trip[i, 'mutType'] <- "A:T to T:A" 
    } 
    else if(trip$Ref.y[i]=='A' & trip$Variant.y[i]=='G'|trip$Ref.y[i]=='T' & trip$Variant.y[i]=='C') { 
    trip[i, 'mutType'] <- "A:T to G:C" 
    } 
    else if(trip$Ref.y[i]=='A' & trip$Variant.y[i]=='C'|trip$Ref.y[i]=='T' & trip$Variant.y[i]=='G') { 
    trip[i, 'mutType'] <- "A:T to C:G" 
    } 
}