1. ホーム
  2. r

[解決済み] R - 関数内のデータ・フレームをサブセットするときに、未定義の列が選択されます。

2022-02-19 17:24:35

質問事項

肺炎という列と、州や病院名などの列を持つ、quot;outcome;というデータフレームを持っています。

コマンドラインで実行すると

outcome <- read.csv("Assigment3/outcome-of-care-measures.csv", colClasses = "character")
temp <- subset(outcome, State =="NY", select=c(Hospital.Name, Pneumonia)

を実行すると、病院名と肺炎の2つのカラムを持つ一時的なデータフレームが作成されます。

しかし、同じ命令を含む関数を作成したところ

state は state カラムの中の値で、outcome1 は単なるカラム名です。

best <- function(state, outcome1) {
    outcome <- read.csv("Assigment3/outcome-of-care-measures.csv", colClasses = "character")  
    temp <- subset(outcome, State ==state, select=c(Hospital.Name, outcome1))
}

で、その関数を呼び出す。

best("NY","Pneumonia")

エラーが出ます。

Error in [.data.frame`(x, r, vars, drop = drop) : 未定義の列が選択されました

に問題があるのは分かっているのですが outcome1 をハードコードすると outcome1 を引数として渡す代わりに、上記の関数で渡すと、関数は期待通りに動作します。

どのように解決するのですか?

が必要だと思います。 get の周りに outcome1 というのは、引数としてオブジェクトではなく文字列を渡しているからです。この例のデータでは

outcome <- data.frame(Pneumonia = sample(0:1, size = 5, replace = TRUE),
                      State = c("NY", "NY", "NY", "CA", "CA"),
                      Hospital.Name = LETTERS[1:5]
                      )

そして、この修正された関数。

best <- function(df_, state_, var_) {
  subset(df_, State == state_, select = c(Hospital.Name, get(var_)))
}          

これで、多かれ少なかれ、以前と同じように呼び出すことができます。

> best(df_ = outcome, state_ = "NY", var_ = "Pneumonia")
  Hospital.Name Pneumonia
1             A         0
2             B         1
3             C         0