0
警告メッセージが表示されます:「使用すると、長さが1より大きく、最初の要素のみが使用されます」次の関数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
私はこれに似ていますが、それらのどれものために明らかにしていないここにいくつかの他の質問があることを知っています私には何が問題なのでしょうか? Rのように、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=""))
可能性のある重複したように、関数を適用するものを使用して、機能をループすることをお勧め.com/questions/22150423/if-returns-the-length-first-only-the-first-element-will-be-used)を返します。 – G5W
おそらく重複していますが、問題はあなたが本当に1より長いベクトルを渡しているということです。自分自身を納得させるために、この 'length(paste(df.short $ AD、df.short $ ED、sep =" "))'を実行します。だからあなたの関数を変更せずにすばやく解決できるのは、* apply: 'sapply(paste(df.short $ AD、df.short $ ED、sep =" ")、fixED)'に入れることです。完全に再修正された修正は、あなたの条件を満たす 'x'の要素を置き換えるために' nchar'のベクトル出力を使うことです: 'x [nchar(x)== 3] < - gsub( '^( {2})(。*)$ '、' \\ 100 \\ 2 '、x [nchar(x)== 3]) ';最後に新しい関数の最後に 'x'を返します –