警告是啥意思:条件的长度> 1,并且只使用第一个元素
Posted
技术标签:
【中文标题】警告是啥意思:条件的长度> 1,并且只使用第一个元素【英文标题】:What does warning mean: the condition has length > 1 and only the first element will be used警告是什么意思:条件的长度> 1,并且只使用第一个元素 【发布时间】:2017-10-06 16:29:35 【问题描述】:当我尝试使用以下函数 fixED
时,我收到警告:“条件的长度 > 1 并且只会使用第一个元素”:
> fixED
function(x)
if(nchar(x) == 5)
return(x)
else if(nchar(x) == 3)
return(gsub('^(.2)(.*)$', '\\100\\2', x))
else if(nchar(x) == 4)
return(gsub('^(.2)(.*)$', '\\10\\2', x))
这是完整的警告集:
Warning messages:
1: In if (nchar(x) == 5) :
the condition has length > 1 and only the first element will be used
2: In if (nchar(x) == 4) :
the condition has length > 1 and only the first element will be used
3: In if (nchar(x) == 3) :
the condition has length > 1 and only the first element will be used
我知道这里还有一些与此类似的其他问题,但没有一个问题为我澄清问题可能是什么。在我看来,if 语句中的逻辑表达式返回一个大于 1 的向量。
但是,我不明白这是怎么回事,因为我相当肯定它们是 1 的逻辑向量。事实上,以下似乎证明了这一点:
> length((nchar("43") ==2))
[1] 1
谁能看出这里有什么问题?我现在很难过。我想应用此函数的数据如下所示:
> df.short
AD ED
9918 57 84
9919 57 84
9920 57 84
9921 57 84
9922 57 84
9923 57 84
9924 57 84
9925 57 85
9926 57 85
9927 57 85
9928 57 85
我是这样应用的:
df.short$test <- fixED(paste(df.short$AD, df.short$ED, sep=""))
【问题讨论】:
IF returns "the condition has length > 1 and only the first element will be used"的可能重复 可能是重复的......但为了帮助您,您的问题是您确实传递了一个长于 1 的向量。要说服自己,请执行此操作length(paste(df.short$AD, df.short$ED, sep=""))
。所以在不改变你的功能的情况下,快速的解决方案是将它放在 *apply:sapply(paste(df.short$AD, df.short$ED, sep=""), fixED)
中。一个完全重新设计的解决方法是使用nchar
的向量输出来替换满足您条件的x
的元素:例如,x[nchar(x) == 3] <- gsub('^(.2)(.*)$', '\\100\\2', x[nchar(x) == 3])
;最后在你的新函数结束时返回x
【参考方案1】:
这个,
paste(df.short$AD, df.short$ED, sep="")
是一个向量,长度不是 1,所以当你将它传递给你的函数时,你是在针对一个标量测试一个向量:
nchar(x) == 5
我建议使用 apply 函数循环您的函数,例如
mapply(fixED, x = paste(df.short$AD, df.short$ED, sep=""))
【讨论】:
以上是关于警告是啥意思:条件的长度> 1,并且只使用第一个元素的主要内容,如果未能解决你的问题,请参考以下文章
“警告无法确定响应正文的内容长度”是啥意思。意思是我如何摆脱它?
此 WCF 错误是啥意思:“自定义工具警告:无法导入 wsdl:portType”