对于以下代码,我收到消息“条件长度> 1且仅使用第一个元素”:
if (is.na(PSIBl_Tax_Gene$CDS_Acc1)==TRUE & is.na(PSIBl_Tax_Gene$GeneID)==FALSE)
我想这里IF只看“==”运算符,但我真的对IF看整个表达式感兴趣,由“&”给出(AND)逻辑运算符。我想我的语法错误,但到目前为止我还没弄清楚哪个。
答案 0 :(得分:2)
尝试:
if(all(is.na(PSIBl_Tax_Gene $ CDS_Acc1)== TRUE& is.na(PSIBl_Tax_Gene $ GeneID)== FALSE))
(另见矢量逻辑运算符“any”)。
问题是你试图调整一个TRUE / FALSE值的向量:
if(c(TRUE,FALSE,TRUE,TRUE,...))显示(“是”)
因此消息。看看运行时会发生什么
is.na(PSIBl_Tax_Gene $ CDS_Acc1)
你应该得到一个TRUE / FALSE值的向量。您要么需要查看其中一个:
is.na(PSIBl_Tax_Gene $ CDS_Acc1)[X] == TRUE
其中x是您感兴趣的矢量元素的索引,或者您可以将整个矢量与TRUE / FALSE值的矢量进行比较
all(is.na(PSIBl_Tax_Gene $ CDS_Acc1)== rep(TRUE,length(PSIBl_Tax_Gene $ CDS_Acc1)))
简而言之
all(is.na(PSIBl_Tax_Gene $ CDS_Acc1)== TRUE))