我可以从函数参数创建值名称,并为其分配函数输出吗?

时间:2019-05-07 05:34:21

标签: r function

我创建了一个函数,该函数使用ggplot清理数据和绘图。我想命名清理后的数据并在其后缀上一个后缀,以便可以轻松调用它。

For example:
data_frame
data_frame_cleaned
data_frame_plot

我没有找到可能导致这种情况发生的任何东西。

我读过有关使用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 个答案:

答案 0 :(得分:1)

使用assign分配变量是not the best idea。您可以在环境中填充很多变量,这些变量可能会造成混乱,并使其难以以编程方式进行处理。最好将对象存储在列表中,这样可以轻松提取数据或使用*applymap_*函数按顺序对其进行修改。那就是……

如上所述或多或少运行您的函数时,我无法复制警告。不过,尽管该函数似乎运行得很好,但是它并没有实现所需的功能,即.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)