为了账号安全,请及时绑定邮箱和手机立即绑定

条件的长度> 1,并且仅使用第一个元素

条件的长度> 1,并且仅使用第一个元素

白猪掌柜的 2019-11-19 09:56:30
我有一个数据框,旅行:> head(trip.mutations)  Ref.y Variant.y1 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 应该看起来像这样:mutTypeA:T to G:CG:C to C:GA:T to C:GA:T to G:CG:C to T:AG:C to A:T有人可以在这里发现问题吗?我需要||吗 代替| 也许?
查看完整描述

2 回答

?
POPMUISE

TA贡献1765条经验 获得超5个赞

之所以if会出现错误,是因为只能评估logical长度为1 的向量。


也许您错过了&(|)和&&(||)之间的区别。较短的版本按元素运行,而较长的版本仅使用每个向量的第一个元素,例如:


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"


查看完整回答
反对 回复 2019-11-19
?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

就像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"

  }

}


查看完整回答
反对 回复 2019-11-19
  • 2 回答
  • 0 关注
  • 842 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信