【发布时间】:2021-10-04 14:03:40
【问题描述】:
我想我在这里发布了同样的问题:R Programming: Condition giving always TRUE,但我不知道如何将答案应用于我的情况。
下面的 if 语句在 major_allele 列中搜索 REF 的匹配项,反之亦然。问题是它总是评估为真,如带星号的行所示。上述链接上的先前答案表明 ifelse 总是产生一个向量,所以我猜测它只查看第一个观察值,评估为真,然后在所有行中进行相同的操作。但是,我希望它逐行进行。下面 new_gwas_a1 是从所有行的 REF 列创建的,但对于带星号的行,它应该是 false。
for (i in files){
rsid.tmp <- read.table(i, header = TRUE, sep=" ", stringsAsFactors =
FALSE, fill = TRUE)
rsid.tmp$new_gwas_a1 <-if((sapply(lapply(rsid.tmp$REF, grepl,
x=rsid.tmp$major_allele),any))
|| (sapply(lapply(rsid.tmp$major_allele, grepl,
x=rsid.tmp$REF),any)))
{rsid.tmp$REF}
new_file <- sub("(\\.txt)$", "_updated\\1", i)
write.table(rsid.tmp, new_file, quote = FALSE, row.names = FALSE)
REF ALT minor_allele_frequency minor_allele major_allele
new_gwas_a1
A G 0.000219914 G A A
C T 0.0144844 T C C
C T 0.0445486 T C C
C T 0.00647968 T C C
C T 0.222656 T C C
**A G,T 0.12189 A G A
**A G,T 0.305252 A G A
C T 0.00210762 T C C
C A 0.00139373 A C C
我之前也收到过此警告,此后未再次显示,但我想知道问题是否相关。警告消息:在 if (sapply(lapply(rsid.tmp$REF, grepl, x = rsid.tmp$minor_allele), : 条件长度 > 1 并且只使用第一个元素
我直接在 R 中尝试了相同的代码,它似乎可以工作。请看下面
> a <- c("TGTGTGT")
> b <- c("AC")
> c <- c("A")
> d <- c("AGTGTG,ATGTGT")
> e <- c("TG")
> if((sapply(lapply(a, grepl, x=c),any)) || (sapply(lapply(c, grepl,
x=a),any))) {print(Yes)}
> if((sapply(lapply(b, grepl, x=c),any)) || (sapply(lapply(c, grepl,
x=b),any))) {print("Yes")}
[1] "Yes"
【问题讨论】:
标签: r if-statement apply