3 つの重要な種類の列を含むデータ セット (ここでは「データ」と呼びます) があります。機関のリストに対応する「ラベル」列。各機関がどのグループに属しているかを示す「グループ」列と、さまざまな結果/測定値に関する各機関の数値スコアを示す一連の「測定値」列。
私の仕事は、ユーザー指定のグループと測定値を取得し、指定されたグループ内で指定された測定値で最低のスコアを持つ機関を見つける関数を作成することです。
これは少し簡略化されており、ラベルは一般的ですが、多かれ少なかれ次のように書きました。
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))
}
独自の値を入力してこの関数を実行すると、次のように返されます。
警告メッセージ: in min(inputMeasurecolumn) : min に欠落していない引数はありません。Inf を返す
コードを 1 行ずつ実行しても、このようなエラーは発生しません。return(inputMeasurecolumn)
inputMeasurecolumn を定義した直後のように、コードに余分な行を含めると、関数はNULL
;を返します。この行を 1 行ずつ実行し、独自の値を入力すると、inputMeasurecolumn は期待どおりの適切なベクトルを返し、期待どおりmin(inputMeasurecolumn)
にそのベクトルの最小値を返します。私が見ることができる唯一の違いは、inputMeasurecolumn を形成するサブセットに入る一般的な「メジャー」変数ではなく、行ごとに実行するときに、測定の名前を直接入力することです。しかし、どちらの場合も、列名を参照する文字オブジェクトが含まれているため ( のおかげでnameBinding
)、何が起きているのかわかりません。