我有一个数据集(此处称为'数据'),其中包含三种重要的列:A'标签'专栏,对应一系列机构;一个小组'列出每个机构属于哪个组的列,以及一系列的“衡量标准”。列表示每个机构在不同结果/措施上的数字分数。
我的任务是编写一个功能,该功能采用用户指定的组和度量,并找到给定组中给定度量上得分最低的机构。
我写了或多或少的以下内容,虽然这有点削减,标签是通用的:
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)
给出了该向量的最小值。我能看到的唯一区别是,当逐行运行而不是通用的“措施”时。进入形成inputMeasurecolumn的子集的变量,我直接输入测量的名称。但是,因为在这两个实例中都存在引用列名的字符对象(感谢nameBinding
),我真的无法看到它是什么。
答案 0 :(得分:1)
group <- "somegroup"
groupwiseList$group
与
不同groupwiseList$somegroup
您可能希望改为使用groupWiselist[,group]
。
我没有花时间进行全面调试,看看这是否是问题,但它确实对我不利。