R - неопределенные столбцы, выбранные при подстановке фрейма данных внутри функции - PullRequest
0 голосов
/ 26 июня 2018

Привет! У меня есть фрейм данных с именем «исход» со столбцом «пневмония» и некоторыми другими столбцами, такими как «State» и «Hospital.Name»

когда я запускаю в командной строке

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

работает и создает временный фрейм данных с 2 столбцами Hospital.Name и Pneumonia.

но когда я создаю функцию, которая содержит ту же инструкцию

состояние - это значение внутри столбца состояния, а result1 - это просто имя столбца

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")

Я получаю сообщение об ошибке:

Ошибка в [.data.frame` (x, r, vars, drop = drop): выбраны неопределенные столбцы

Я знаю, что проблема в переменной outcome1, так как, если я жестко кодирую outcome1 в вышеуказанной функции, вместо того, чтобы передавать ее в качестве аргумента, функция работает как положено.

Ответы [ 3 ]

0 голосов
/ 26 июня 2018

Трудно показать пример без данных, но вы можете установить подмножества столбцов, которые могут быть или не быть в вашем фрейме данных, как это. Вы можете добавить строку в вашу функцию сразу после команды подмножества. (и не бросайте столбцы в строке подмножества)

colnames( mtcars) 
# the cols you want to drop
drops <- c("mpg","colthatdoesntexisit","wt")
# drop those cols if they exisit in df
mtcars <- mtcars[ , !( names( mtcars) %in% drops ) ]
colnames( mtcars)
0 голосов
/ 26 июня 2018

Я думаю, вам нужно 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
0 голосов
/ 26 июня 2018

Вы пробовали это?

temp <- subset(outcome, State =="NY", select=c(State, Hospital.Name, Pneumonia)

Я предполагаю, что вы хотите оставить поле State во фрейме данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...