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

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

/ 猿问

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

慕瓜9086354 2019-11-19 09:56:30

我有一个数据框,旅行:


> 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

有人可以在这里发现问题吗?我需要||吗 代替| 也许?


查看完整描述

2 回答

?
POPMUISE

之所以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
?
慕用2447696

就像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 关注
  • 32 浏览
我要回答

相关问题推荐

添加回答

回复

举报

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