微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

for循环和if语句给出错误的参数

如何解决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 举报,一经查实,本站将立刻删除。