R – Coloane nedefinite selectate atunci când se subsumează cadrul de date în cadrul unei funcții (Programare, R)

Juan Lozano a intrebat.
a intrebat.

Bună ziua, am un cadru de date numit „outcome” cu o coloană numită „pneumonie” și alte coloane precum „State” și „Hospital.Name”.

când execut în linia de comandă

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

funcționează și creează un cadru de date temporar cu 2 coloane: Hospital.Name și Pneumonia.

dar când creez o funcție care conține aceeași instrucțiune

state este o valoare în interiorul coloanei state, iar outcome1 este doar numele coloanei

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

și chem funcția:

best("NY","Pneumonia")

Primesc eroarea:

Eroare în [.data.frame`(x, r, vars, drop = drop) : coloane nedefinite selectate

Știu că problema este cu outcome1 variabila, deoarece, dacă introduc în mod greșit outcome1 în funcția de mai sus, în loc să o trec ca argument, funcția funcționează conform așteptărilor.

3 răspunsuri
Luca C

Cred că aveți nevoie de get în jurul valorii de dvs. outcome1 în definiția funcției, deoarece treceți ca argument un șir de caractere și nu un obiect. Cu acest exemplu de date:

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

Și această funcție modificată:

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

Acum o puteți apela mai mult sau mai puțin ca înainte:

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

Comentarii

  • @JuanLozano – Mă bucur să vă ajut! Noroc –  > Por Luke C.
MatthewR

Este greu să arăți un exemplu fără date, dar poți să subset cols care pot sau nu să fie în data.frame-ul tău, așa. Ați putea adăuga o linie în funcția dvs. imediat după comanda subset. (și apoi nu renunțați la cols în linia de subset)

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)

Louis Merlin

Ați încercat acest lucru?

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

Presupun că doriți să păstrați State câmpul în cadrul de date.

Comentarii

  • aceasta este aceeași cu prima opțiune pe care o încerc fără să folosesc funcția „best”, problema pe care o am este atunci când o folosesc în interiorul unei funcții și state devine o variabilă, iar numele coloanei este cealaltă variabilă –  > Por Juan Lozano.
  • Acest lucru nu încearcă să răspundă la întrebare. Întrebarea se referă în special la transmiterea valorii lui outcome ca argument al funcției. –  > Por divibisan.
  • @divibisan – nu există suficiente informații în întrebare pentru a indica faptul că aceasta este problema? –  > Por MatthewR.

Tags: