警告是什么意思:条件的长度 > 1,并且只会使用第一个元素

What does warning mean: the condition has length > 1 and only the first element will be used

我收到警告:"the condition has length > 1 and only the first element will be used",当我尝试使用以下函数时 fixED

> 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

我知道这里还有其他一些与此类似的问题,但其中 none 已经为我阐明了问题所在。在我看来,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=""))

这个,

paste(df.short$AD, df.short$ED, sep="")

是一个向量,不是长度为 1 的向量,因此当您将其传递给您的函数时,您是在针对标量测试向量:

nchar(x) == 5

我建议使用应用函数循环你的函数,比如

mapply(fixED, x = paste(df.short$AD, df.short$ED, sep=""))