Uruchamiam tę funkcję w R, która ma wykreślić krzywą gęstości na histogramach Mam tutaj oryginalny pojedynczy kod:


ggplot(golf, aes(`Driving Accuracy`)) +
        geom_histogram(aes(y = ..density..), colour = "black", fill = "white") +
        stat_function(fun = dnorm, args = list(mean = mean(golf$`Driving Accuracy`, na.rm = T), 
                                               sd = sd(golf$`Driving Accuracy`, na.rm = T))) +
        xlab("Driving Accuracy (%)")

Teraz próbowałem zmodyfikować ten kod i użyj Lapply i Moje dane, które są numeryczne, aby wykonać podobną działkę.

plotter <- function(s) ggplot(Prediction.df, aes(s)) +
        geom_histogram(aes(y = ..density..), colour = "black", fill = "white") +
        stat_function(fun = dnorm, args = list(mean = mean(Prediction.df[,s], na.rm = T), 
                                               sd = sd(Prediction.df[,s], na.rm = T))) +
        xlab("Frequency")
lapply(X=names(Prediction.df),FUN=plotter)

Teorią za moją próbą jest to, że widziałem, że początkowy Dataframe nazywał się Golfem, a w moim przypadku przewidywania.df, więc zostawiłem tę stałą. Potem zobaczyłem, że kolumna zainteresowania została wywołana, więc zastąpiłem, że z s w moim nowym kodzie, a funkcja, uważam, że jest to błąd, ponieważ oryginalny kod ma golf $, jak w przypadku średniej i odchylenia standardowego. Jednak próbowałem progniny.df $ s i nie działa. jakieś pomysły?

1
EnlightenedFunky 3 maj 2021, 18:43

2 odpowiedzi

Najlepsza odpowiedź

W nowszej wersji dplyr minęło łańcuch w aes można było przekonwertować na sym bol i ocenić (!!), jak aes_string może być przestarzały w przyszłość. Należy pamiętać, że ensym może podjąć zarówno cytowany lub nieokreślony argument

plotter <- function(s) {
           ggplot(Prediction.df, aes(!! rlang::ensym(s))) +
    geom_histogram(aes(y = ..density..),
        colour = "black", fill = "white") +
    stat_function(fun = dnorm, args = 
      list(mean = mean(Prediction.df[,s], na.rm = TRUE), 
             sd = sd(Prediction.df[,s], na.rm = TRUE))) +
    xlab("Frequency")
 }

Lub inna opcja jest .data[[s]] wewnątrz aes I. aes(.data[[s]])

1
akrun 3 maj 2021, 16:55

aes() nie może wziąć wejścia ciągów. Spróbuj aes_string() zamiast tego:

plotter <- function(s) ggplot(Prediction.df, aes_string(s)) +
        geom_histogram(aes(y = ..density..), colour = "black", fill = "white") +
        stat_function(fun = dnorm, args = list(mean = mean(Prediction.df[,s], na.rm = T), 
                                               sd = sd(Prediction.df[,s], na.rm = T))) +
        xlab("Frequency")
lapply(X=names(Prediction.df),FUN=plotter)
2
VitaminB16 3 maj 2021, 15:51