2017-04-12 1 views
0

Lange Zeit SAS-Benutzer, aber Anfänger R Programmierer versucht, durch Coursera R-Programmierung Kurs zu lernen. Bei der letzten Aufgabe wird versucht, die niedrigste Sterblichkeitsrate eines Krankenhauses mit Funktionseingaben des Zustands und des Ergebnisnamens (z. B. Herzinfarkt) auszugeben.dplyr Funktion wirft "Fehler in filter_impl (.data, dots): ungültiges Argument für unären Operator"

Ich versuche alles mit dplyr zu tun, da ich weiß, es ist eine gute Möglichkeit, Daten zu streiten. Aber mein Code unten wirft einen "Fehler in filter_impl (.data, dots): ungültiges Argument zu unärer Operator" -Fehler.

Hier ist, was ich versucht habe: rezensiert das "R for Data Science" -Buch, durchsucht StackOverflow und andere Online-Stellen, ran Schnipsel meiner Funktion, um einzugrenzen, wo es ist (Ich habe nur ein Schnipsel meiner Funktion eingefügt da der Fehler an 3 Stellen auftritt), Traceback, etc. gezeigt. Natürlich habe ich nach all diesen Quellen viele verschiedene Änderungen am Code ausprobiert, aber nada.

Kann mir bitte jemand in die richtige Richtung zeigen?

best <- function(state_input, oc_name) { 
    outcome <- read.csv("outcome-of-care-measures.csv", colClasses = "character")  
    if (oc_name == "heart attack") { 
     return_outcome <- outcome %>% select(State, 
             Hospital.30.Day.Death..Mortality..Rates.from.Heart.Attack) %>% 
      filter(State == state_input) %>% 
      arrange(Hospital.30.Day.Death..Mortality..Rates.from.Heart.Attack) %>% 
      top_n(1, -Hospital.30.Day.Death..Mortality..Rates.from.Heart.Attack) 
    } 
} 
best(state_input = "TX", oc_name = "heart attack") 
+1

als Ihre angegebenen 'colClasses =" Zeichen "', alle Spalten würden Zeichen sein. So '- Hospital.30.Day.Death..Mortality..Rates.from.Heart.Attack' würde durch einen Fehler. Wenn Sie vermeiden möchten, dass einige Zeichenspalten als numerisch gelesen werden, stellen Sie sicher, dass Sie andere Spalten in den richtigen Typ konvertieren. – mt1022

Antwort

0

Der Fehler ist wahrscheinlich damit verbunden, was mt1022 über das Zeichenspaltenklassenargument sagte. Stattdessen sollten Sie stringsAsFactors = FALSE verwenden:

outcome <- read.csv("outcome-of-care-measures.csv", stringsAsFactors = FALSE) 

Sie möchten vielleicht auch das Laden Sie Ihre Daten außerhalb der Funktionsaufruf betrachten und die bedingte Anweisung zu entfernen, es sei denn, Sie verschiedene Abschnitte zu haben, planen andere Arten von Ergebnissen mit der gleichen Funktion zu handhaben :

best_heart_attack <- function(state_input, outcome) { 
    return_outcome <- outcome %>% 
     select(State, Hospital.30.Day.Death..Mortality..Rates.from.Heart.Attack) %>% 
     filter(State == state_input) %>% 
     arrange(Hospital.30.Day.Death..Mortality..Rates.from.Heart.Attack) %>% 
     top_n(1, -Hospital.30.Day.Death..Mortality..Rates.from.Heart.Attack) 

    return(return_outcome) 
} 

best_heart_attack(state_input = "TX", outcome = outcome) 
Verwandte Themen