2017-10-05 8 views
0

私はRの初心者です。今度は、forループを使用してダイヤモンドの最初のn回の観測で、カラーEと透明度SI2のダイヤモンドの数を数えます データセット。私は私のコードは次のように書くR:ループ/カウント条件付き行/データフレームの場合

library(ggplot2) 

countESI2<-function(n){ 
    k<-NULL 
    diamonds1<-diamonds[1:n,] 
    for (i in 1:n) { 
    if(diamonds1$color=="E" & diamonds1$clarity=="SI2") { 
     k<-k+1} 
    } 
    return(k) 
} 
countESI2(50) 

は、しかし、それは動作しませんでした、誰も私がそれをチェックするのに役立つだろうか?多くの感謝。

+0

1つの問題は 'k'初期化です:何かをゼロに設定するには' NULL'ではなく 'k < - 0'で初期化します。後者は、価値のないものです。 –

答えて

0

ここにはいくつかの問題があります。まず、kは、ではなく、0で開始する必要があります。 NULL + 1numeric(0)に等しく、おそらく期待通りには1ではありません。 2番目に、diamondsのどの行に興味を持っているのかを索引付けする必要があります。第3に、質問と関数名に記載されているSI2ではなく、ST2を明確にしているように見えます。

countESI2<-function(n){ 
    k<-0 # Not NULL 
    for (i in 1:n) { 
    if(diamonds$color[i]=="E" & diamonds$clarity[i]=="SI2") { # Index by i; change from "ST2" 
     k<-k+1} 
    } 
    return(k) 
} 
countESI2(50) 
0

あなたのコードは、いくつかの問題ました:毎回

  1. あなたのループ内if文がi変数の一切利用しないので、それは論理的に全体の「色」と「明快さ」の列を比較しています。
  2. kは、NULLに初期化してはなりません(何もしません)。代わりに、0に設定してください。
  3. このタスクでは、 "SI2"の出現をカウントしていますが、コード参照は "ST2"です。
  4. これは宿題ですので、自分でコードを修正する必要があります。