2014-04-26 5 views
21

उपयोग किया जाएगा मैं एक dataframe, यात्रा है:हालत लंबाई> 1 है और केवल पहला तत्व

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 

मैं एक तीसरे स्तंभ, mutType, कि इन नियमों का पालन करती जोड़ना चाहते हैं

लेकिन मैं त्रुटि मिलती है:

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 

मुझे नहीं लगता कि मेरी तार्किक कथनों वैक्टर उत्पादन किया जाना चाहिए, लेकिन शायद मैं मैं कुछ याद कर रहा हूँ

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 

किसी को भी स्पॉट सकते हैं यहाँ क्या गलत है: यात्रा $ mutType इस तरह लग रही अंत करना चाहिए? क्या मुझे चाहिए || के बजाय | शायद?

उत्तर

36

आप क्योंकि if केवल लंबाई 1.

के logical वेक्टर मूल्यांकन कर सकते हैं त्रुटि मिलती है शायद तुम & (|) और && (||) के बीच का अंतर याद आती है। छोटा संस्करण तत्व के लिहाज से काम करता है और लंबे समय तक संस्करण प्रत्येक वेक्टर, जैसे का केवल पहला तत्व का उपयोग करता:

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

धन्यवाद, कि चाल करता है:

यहाँ अपनी समस्या को हल करने के लिए एक और तरीका है – soosus

2

sgibb की तरह कहा:

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

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

आप सब पर if बयान की जरूरत नहीं है यह एक समस्या थी, इसका कोई लेना देना नहीं था या ||

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" 
    } 
} 
संबंधित मुद्दे