2017-02-11 12 views
-2

特定の問題、私は解決しています:Rベクトル値は、関数で上書き

は、各要素が文字値を取得するように、という数の-行・オブ・虹彩データセットの長さ、との文字ベクトルを作成します。 - 対応する 'Sepal.Length'> 5の場合は「5以上」、それ以外の場合は「5未満」となります。

この作品:

char_vect <- c(seq(1:nrow(iris))) 

for (i in char_vect) { 
    if (iris$Sepal.Length[i] > 5) { 
    char_vect[i] <- ("greater than 5") } else { 
     char_vect[i] <- ("less than 5") 
    } 
} 

しかし、次のように、私はchar_vectを定義した場合、何らかの理由で、私は面白い回答を得る:

char_vect <- iris$Sepal.Length 

for (i in char_vect) { 
    if (iris$Sepal.Length[i] > 5) { 
    char_vect[i] <- ("greater than 5") } else { 
     char_vect[i] <- ("less than 5") 
    } 
} 

私はオフ始めているベクトルが異なっているが、 2つのケースでは、関数は同じで元のベクトルを上書きしているので、長さが等価である限り、それらの値は無関係であってはなりませんか?

私は2番目のオプションの出力は、いくつかの機能は、それらのすべてを元の値の一部を上書きではなく、同じように見えるので、私はさらに混乱している、何であるかを見て...

私の勘これは、オプション1がchar_vectを整数として定義し、オプション2が数値であるという事実と関係しているのでしょうか?しかし、なぜ比較演算子が整数と数値で等しく動作しないのか分かりません。オプション2の出力を見ると、関数が機能しなかった整数もあるようです。

多くの方々から感謝しています!

+0

'ifelse'関数も参照してください。 –

+0

'i in char_vect':' i'は2番目の大文字小文字のインデックスではありませんが、まだそれを使っています。 – nrussell

+0

ありがとうございます、明らかにもっと学ぶ必要があります - char_vect btwnのインデックス作成の違いを考えなかった。オプション1と2 – ajuey

答えて

-1

2番目のバージョンは実際には意味がありません。

char_vect <- iris$Sepal.Length 
for (i in char_vect) { 
    cat(i, "\n") 
} 
5.1 
4.9 
4.7 
4.6 
5 
5.4 
... Output truncated 

ものは、あなたがiris$Sepal.Length[i]char_vect[i]に入れている、iの値は以下のとおりです。あなたがいることを、このようなループのためにあなたの体を変更することで見ることができます。

関連する問題