![](/img/trans.png)
[英]How to solve: the condition has length > 1 and only the first element will be used
[英]The condition has length > 1 and only the first element will be used
我有一个数据框,旅行:
> 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:
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
我认为我的逻辑语句不应该产生向量,但是也许我缺少了一些东西。 trip $ 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
向量。
也许您错过了&
( |
)和&&
( ||
)之间的区别。 较短的版本按元素运行,而较长的版本仅使用每个向量的第一个元素,例如:
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"
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.