R:代码逐行工作但未作为函数实现
R: Code works line by line but not implemented as a function
我有一个数据集(此处称为'data'),其中包含三种重要的列: 'label' 列,对应机构列表;一个 'group' 列说明每个机构属于哪个组,以及一系列 'measure' 列表示每个机构在不同 outcomes/measures 上的数值分数。
我的任务是编写一个函数,它采用用户指定的组和度量,并在给定组中找到给定度量得分最低的机构。
我或多或少写了以下内容,尽管这有点精简并且标签是通用的:
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))
}
当我执行此函数并输入我自己的值时,我返回:
Warning message: In min(inputMeasurecolumn) : no non-missing arguments to min;
returning Inf
当我逐行运行代码时,没有出现这样的错误。如果我在定义 inputMeasurecolumn 之后在代码中包含额外的一行,例如 return(inputMeasurecolumn)
,函数 returns NULL
;当我 运行 一行一行地输入我自己的值时, inputMeasurecolumn returns 一个符合我期望的合理向量,并且 min(inputMeasurecolumn)
给了我那个的最小值预期的向量。我能看到的唯一区别是,当 运行 逐行而不是进入形成 inputMeasurecolumn 的子集的通用 'measure' 变量时,我直接输入测量的名称。但是因为在这两种情况下,都有引用列名的字符对象(感谢nameBinding
),我真的看不出发生了什么。
group <- "somegroup"
groupwiseList$group
与
不一样
groupwiseList$somegroup
您可能想改用 groupWiselist[,group]
。
我没有花时间进行全面调试以查看这是否是问题所在,但它确实对我很重要。
我有一个数据集(此处称为'data'),其中包含三种重要的列: 'label' 列,对应机构列表;一个 'group' 列说明每个机构属于哪个组,以及一系列 'measure' 列表示每个机构在不同 outcomes/measures 上的数值分数。
我的任务是编写一个函数,它采用用户指定的组和度量,并在给定组中找到给定度量得分最低的机构。
我或多或少写了以下内容,尽管这有点精简并且标签是通用的:
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))
}
当我执行此函数并输入我自己的值时,我返回:
Warning message: In min(inputMeasurecolumn) : no non-missing arguments to min; returning Inf
当我逐行运行代码时,没有出现这样的错误。如果我在定义 inputMeasurecolumn 之后在代码中包含额外的一行,例如 return(inputMeasurecolumn)
,函数 returns NULL
;当我 运行 一行一行地输入我自己的值时, inputMeasurecolumn returns 一个符合我期望的合理向量,并且 min(inputMeasurecolumn)
给了我那个的最小值预期的向量。我能看到的唯一区别是,当 运行 逐行而不是进入形成 inputMeasurecolumn 的子集的通用 'measure' 变量时,我直接输入测量的名称。但是因为在这两种情况下,都有引用列名的字符对象(感谢nameBinding
),我真的看不出发生了什么。
group <- "somegroup"
groupwiseList$group
与
不一样groupwiseList$somegroup
您可能想改用 groupWiselist[,group]
。
我没有花时间进行全面调试以查看这是否是问题所在,但它确实对我很重要。