2015-06-28 95 views
2

我有一個數據集(這裏稱爲「數據」),它包含三種重要的列:一個'標籤'列,它對應於一個機構列表;指定每個機構屬於哪個組的「組」列以及指示每個機構對不同結果/度量的數字分數的一系列「度量」列。R:代碼一行一行,但沒有作爲函數執行

我的任務是編寫一個函數,它接受用戶指定的組和度量,並找到給定度量中得分最低的給定組內的機構。

我寫了或多或少以下,雖然這是一個有點削減下來的標籤是通用的:

func <- function(group, measure) { 
    data <- read.csv("data.csv") 
    dataSubset <- data[, c(1, 2, 3, 4, 5)] 
    headings <- colNames(dataSubset) 

    measureInputs <- as.character(c("m1", "m2", "m3")) 
    # A vector of accepted inputs for 'measure', corresponding 
    # roughly to column names in 'dataSubset' 

    nameBinding <- as.list(mapply(assign, measureInputs, headings[3:5])) 
    # Assigns each accepted input to a cognate column name in 'dataSubset' 

    groupWiselist <- split(dataSubset, dataSubset$Groupcolumn) 
    # Splits 'dataSubset' by individual groups in the group column (column 2) 
    # into distinct groupwise data frames 

    inputGroupdata <- groupWiselist$group 
    # Creates a single data frame, corresponding to the subset of dataSubset 
    # picked out by the user specified group 

    inputMeasurecolumn <- as.vector(inputGroupdata[[nameBinding[[as.character(measure)]]]]) 
    # Creates a vector of values contained in the user specified column 
    # ('measure'), within the values containing the user specified group 

    labelMin <- inputGroupdata$Labelcolumn[inputMeasurecolumn == min(inputMeasurecolumn)] 
    # Finds the label within 'Labelcolumn' on the same row as the minimum 
    # value of the user specified column 

    return(as.character(labelMin)) 
} 

當我執行此功能輸入我自己的價值觀,我回去:

警告消息:在min(inputMeasurecolumn)中:沒有非缺少參數min; 返回Inf

當我逐行運行代碼時不會出現此類錯誤。如果在定義inputMeasurecolumn後在代碼中包含額外的行,如return(inputMeasurecolumn),則該函數返回NULL;當我一行一行地運行這個行並在我輸入自己的值時,inputMeasurecolumn返回一個我期望的類型的合理矢量,並且min(inputMeasurecolumn)給出了該矢量的最小值。我可以看到的唯一區別是,當逐行運行而不是通用的'measure'變量進入構成inputMeasurecolumn的子集時,我直接輸入測量的名稱。但是,既然在這兩種情況下都有指向列名的字符對象(感謝nameBinding),我真的不知道發生了什麼。

+0

您的代碼不可重複! – Robert

回答

1
group <- "somegroup" 
groupwiseList$group 

是不一樣的

groupwiseList$somegroup 

你可能想使用groupWiselist[,group]代替。

我沒有花時間來完全調試,看看這是否是問題,但它肯定會對我產生影響。

+0

這似乎是問題所在,是的。由於groupWiselist是數據框的列表,而不是數據框本身,所以我使用了'groupWiselist [[group]]'來代替它,這似乎解決了這些問題。謝謝! –