条件长度> 1,只有第一个元素将被使用
我有一个dataframe,旅程:
> head(trip.mutations) Ref.y Variant.y 1 TC 2 GC 3 AC 4 TC 5 CA 6 GA
我想添加第三列,mutType,遵循这些规则:
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" } }
但我得到的错误:
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 应该最终看起来像这样:
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
任何人都可以发现这里有什么问题? 我需要||吗? 而不是| 也许?
你得到的错误,因为if
只能评估一个长度为1的logical
向量。
也许你错过了&
( |
)和&&
( ||
)之间的区别。 较短的版本以元素方式工作,较长的版本仅使用每个vector的第一个元素,例如:
c(TRUE, TRUE) & c(TRUE, FALSE) # [1] TRUE FALSE # c(TRUE, TRUE) && c(TRUE, FALSE) [1] TRUE
你根本不需要if
语句:
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"
就像sgibb说的那样,这是一个问题,跟这个没有任何关系 或||。
这是解决您的问题的另一种方法:
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" } }