提问人:KennyG 提问时间:6/24/2023 更新时间:6/24/2023 访问量:44
R 错误:需要 TRUE/FALSE 的地方缺少值
R Error: missing value where TRUE/FALSE needed
问:
我有一个 300+ 对齐的 COI 序列的 phylip 格式文本文件。我正在尝试将序列压缩成单倍型,以便使用朋友编写的 R 脚本进行分析。我遇到麻烦的部分是程序将每个序列与以下序列进行比较,并确定它们是否相差超过 N 个字符。它将在抛出以下错误之前运行前几个序列:
`Error in if (dif.nuc1[p] == "N" | dif.nuc2[p] == "N") { : missing value where TRUE/FALSE needed`
对齐中没有间隙,因此不需要管理 N/A 数据。
知道问题是什么和/或如何解决它吗?或者,任何关于巩固单倍型计划的建议也将不胜感激。
先谢谢你。
下面是控制台输出:
> if (sum(dif.nuc1=='N')==0 & sum(dif.nuc2=='N')==0){
+ } else if (length(dif.nuc1)!=0){
+ counter<- 0
+ for (p in 1:length(dif.nuc1)){
+ cat('p is', p, '\n')
+ if (dif.nuc1[p]== 'N'| dif.nuc2[p]== 'N'){
+ counter<- (counter + 1)
+ }
+ }
+ if (counter == length(dif.nuc1)){
+ hap.equiv<- c(hap.equiv, paste('Hap_', m, ' == Hap_', n, ' ', sep=''))
+ }
+ }
Error in if (dif.nuc1[p] == "N" | dif.nuc2[p] == "N") { :
missing value where TRUE/FALSE needed
我尝试通过以下方式修改代码来管理 N/A 数据,但没有解决问题。
if (dif.nuc1[p] == 'N' | dif.nuc2[p] == 'N' | is.na(dif.nuc1[p]) | is.na(dif.nuc2[p])) {
if (sum(dif.nuc1 %in% c('N', 'NA')) == 0 & sum(dif.nuc2 %in% c('N', 'NA')) == 0) {
} else if (length(dif.nuc1)!=0){
counter<- 0
for (p in 1:length(dif.nuc1)){
cat('p is', p, '\n')
if (dif.nuc1[p]== 'N'| dif.nuc2[p]== 'N'){
counter<- (counter + 1)
我还仔细检查了我的数据,以确保没有歧义代码,也没有导致 NA 数据的间隙
答: 暂无答案
评论
dif.nuc*
是一个什么样的对象?它是一个字符串(即长度的向量),并且您想遍历其字符吗?或者它是 n 个字符串的“列”(即长度向量),并且您想遍历这些字符串?另外,请注意|
和||
. 之间的区别。当 并行运算逻辑向量时,当遇到 时,它会对逻辑标量 (, , ) 和“短路”运算。character
1
character
n
|
||
TRUE
FALSE
NA
TRUE
|
||
is.na()
dif.nuc*[p]
isTRUE(dif.nuc1[p] == "N") || isTRUE(dif.nuc2[p] == "N")
isTRUE()
NA
dput(head(dif.nuc1
, n = 10)) 和dput(head(dif.nuc2, n = 10
)) 的输出来发布您的数据的“可重现示例”(“reprex”)?