2017-10-05 61 views
0

我是R新手。現在我被要求使用for循環來計算鑽石前n個觀察值中顏色E和淨度SI2的鑽石數量 數據集。R:For循環/計數條件行/數據幀

我寫我的代碼是這樣的:

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

一個問題是'k'初始化:設置爲零,你用'k < - 0'而不是'NULL'初始化它。後者是一種無價值的東西。 –

回答

0

這裏有幾個問題。首先,k應該從0開始,而不是NULLNULL + 1等於numeric(0),而不是1,正如您預期的那樣。其次,您需要索引您感興趣的diamonds的哪一行。第三,看起來您正在檢查澄清ST2,而不是SI2,如問題和函數名稱中所述。

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. 由於這是一項家庭作業,因此我會自行修改代碼。