我创建了一个函数,该函数使用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)
中: 仅第一个元素用作变量名
答案 0 :(得分:1)
使用assign
分配变量是not the best idea。您可以在环境中填充很多变量,这些变量可能会造成混乱,并使其难以以编程方式进行处理。最好将对象存储在列表中,这样可以轻松提取数据或使用*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)