如何解决for循环和if语句给出错误的参数
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.3/Chart.bundle.min.js"></script>
<canvas id="myChart" height="90"></canvas>
我有一个数据帧df1,如果“ listid”中的名称不在“ protein”中,则将其保存以丢弃,而如果它在“ protein”中,则将其保存为匹配,并且仅保留匹配 但是我收到以下错误:
df1 <- data.frame(items=c("^TP53$","^PTEN","^BRACA1$","^SYNE4$","^ATM$"),condition = rnorm(5),parameter = rnorm(5),id = rnorm(5),reading = rnorm(5))
df1
listid<-gsub('[$|^]',"",df1$items)
protein<-c("PTEN")
fkeep <- NULL
for (i in 1:length(listid)) {
if (!protein) {discard <- grep(paste0("^",listid[i],"$"),df1$items,fixed = T)}
else {hits <- grep(paste0("^",listid[i]),fixed = T)}
fkeep <- c(fkeep,hits)
# print(fkeep)
}
解决方法
请注意,它告诉您!Protein中有错误。 包括感叹号。
R中的 !
与!=
不同。 !
仅可应用于布尔向量。您需要改用== FALSE
或!=
之类的二进制运算符。
代码失败,因为!
希望您为其提供布尔矢量。除此之外,蛋白质也只有1个元素,因此没有理由在其上使用c()。
所以有多个问题:
df1 <- data.frame(items=c("^TP53$","^PTEN","^BRACA1$","^SYNE4$","^ATM$"),condition = rnorm(5),parameter = rnorm(5),id = rnorm(5),reading = rnorm(5))
df1
listid<-gsub('[$|^]',"",df1$items)
protein<-"PTEN" # this is only 1 item so no c()
fkeep <- NULL
for (i in 1:length(listid)) {
if (listid[i]!=protein) {discard <- grep(paste0("^",listid[i],"$"),df1$items,fixed = T)}
# protein is a variable containing only a single argument but you want to choose this argument from listid
# so you have to loop through listid in search for protein
else {hits <- grep(paste0("^",listid[i]),fixed = T)}
fkeep <- c(fkeep,hits)
print(fkeep)
}
再次查看您的代码后,我发现您的grep代码无法正常工作,因此我自由地对其进行了重写:
for (i in seq_along(listid)){
if (listid[i]!=protein){
hits <- sub("^",paste0(listid[i],df1$items[i],fixed=T)
print(hits)}
#else #{discard<-grep("^",fixed=T) # sets protein row to 1
#{discard<-sub("^",df1$items[i]),fixed=T) # changes ^PTEN to PTENPTEN
#print(discard)}
}
结果现在取决于您运行的丢弃版本
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。