【发布时间】:2020-09-13 07:20:47
【问题描述】:
我有以下代码:
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]), df1$items, fixed = T)}
fkeep <- c(fkeep, hits)
# print(fkeep)
}
我有一个数据框 df1,如果“listid”中的名称不在“蛋白质”中,则将其保存以丢弃,相反,如果在“蛋白质”中,则将其保存到命中,并且仅保留命中 但是我收到以下错误:
Error in !protein : invalid argument type
【问题讨论】:
-
如果我理解正确的话,这似乎是一种非常低效的方式来做你想做的事。至少你可以用
hits <- intersect(listid, protein)和discard <- setdiff(listid, protein)替换循环。您还可以在问题中添加您希望实现的精确输出。
标签: r for-loop if-statement