Могу ли я создать имя значения из аргумента функции и присвоить ему выход функции? - PullRequest
0 голосов
/ 07 мая 2019

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

For example:
data_frame
data_frame_cleaned
data_frame_plot

Мне не удалось найти ничего, что могло бы справиться с этим.

Iпрочитайте об использовании deparse(substitute(x)), чтобы превратить переменную в строку, поэтому я дал ей возможность вместе с paste().

импортировать новый фрейм данных
my_data <- read.csv("my_data.csv")
analyze_data(my_data)
с помощью dpylr и ggplot.

Затем я хочу сохранить analyse_data и data_plot в среде, вот то, что я думал, может работать, но нет ...

analyze_data <- function(x){
    x_data <- x %>%
        filter()%>%
        group_by() %>%
        summarize() %>%
        mutate()
    x_plot <- ggplot(x_data)
    x_name <- deparse(substitute(x))
    assign(paste(x_name,"cleaned",sep="_"),x_data)
    assign(paste(x_name,"plot",sep="_"),x_plot)
}
Вместо этого я получил предупреждение.

Предупреждающие сообщения: 1: В assign(paste(x_name, "cost_plot", sep = "_"), campg_data): в качестве имени переменной используется только первый элемент

1 Ответ

1 голос
/ 07 мая 2019

Использование assign для присвоения переменных - не лучшая идея .Вы можете засорять свою среду множеством переменных, что может привести к путанице и затруднить их программную обработку.Лучше хранить ваши объекты в виде списка, который позволяет легко извлекать данные или последовательно изменять их, используя функции *apply или map_*.Тем не менее ...

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

Вы можете использовать pos = 1, чтобы назначить свои переменные в .GlobalEnv.Следующий код создает переменные mtcars_cleaned и mtcars_plot в моем .GlobalEnv:

library(dplyr)

analyze_data <- function(x){
    x_data <- x %>%
        filter(cyl > 4)
    x_plot <- ggplot(x_data, aes(mpg, disp)) + geom_point()
    x_name <- deparse(substitute(x))
    assign(paste(x_name,"cleaned", sep="_"), x_data, pos = 1)
    assign(paste(x_name,"plot", sep="_"), x_plot, pos = 1)
}

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