2015-06-28 87 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]]'来代替它,这似乎解决了这些问题。谢谢! –