提问人:Maya Eldar 提问时间:10/17/2023 更新时间:10/17/2023 访问量:40
R:我可以创建一个具有无意义参数的对象,然后在一个函数中使用它,该函数使用其输入参数将赋予它意义吗?
R: can I create an object with meaningless parameter and then use it inside a function that, using its input arguments, will give it meaning?
问:
是否可以创建一个包含无意义参数的列表,就像在列表中一样,然后在函数中将这个参数的含义作为参数,如下所示:fill.var
design <- list( geom_boxplot(aes(fill=fill.var), na.rm=TRUE), theme(plot.title = element_text(size = 20, face = "bold"), legend.position = "bottom"), )
general_plot <- function(df,x.var,y.var,fill.var){
ggplot(data=df, aes(x={{x.var}}, y={{y.var}}, fill={{fill.var}}))+design
}
plot_generator(subset_table,treatment,size,treatment)
当我尝试这样编写它时,我在运行该函数时出现错误,当我尝试时也是如此。
当我尝试并在尝试在函数中使用它之前运行对象时出现错误时,我遇到了错误。object `fill.var` not found
design<-list(geom_boxplot(aes(fill=!fill.var)))
design<-list(geom_boxplot(aes(fill=!!fill.var)))
design<-list(geom_boxplot(aes(fill={{fill.var}})))
design
我宁愿这样解决它,但我也可以创建一个默认值并从函数参数中多余它,我不知道如何......fill.var
TNX!
答:
0赞
TarJae
10/17/2023
#1
准引用是引用表达式的组合,同时允许立即评估(取消引用)该表达式的一部分。
1. 使用!!
bang bang operator
sym()
将变量名称从字符串转换为符号。
!!
取消对符号的引用,以便 ggplot 将它们识别为列名
library(ggplot2)
library(rlang)
general_plot <- function(df, x.var, y.var, fill.var) {
# Creating symbols
x.var <- sym(x.var)
y.var <- sym(y.var)
fill.var <- sym(fill.var)
design <- list(
geom_boxplot(aes(fill = !!fill.var), na.rm = TRUE),
theme(plot.title = element_text(size = 20, face = "bold"), legend.position = "bottom")
)
ggplot(data = df, aes(x = !!x.var, y = !!y.var)) + design
}
general_plot(diamonds, "cut", "price", "color")
2. 使用{{}}
curly curly
library(ggplot2)
library(rlang)
general_plot <- function(df, x.var, y.var, fill.var) {
design <- list(
geom_boxplot(aes(fill = {{ fill.var }}), na.rm = TRUE),
theme(plot.title = element_text(size = 20, face = "bold"), legend.position = "bottom")
)
ggplot(data = df, aes(x = {{ x.var }}, y = {{ y.var }})) + design
}
general_plot(diamonds, cut, price, color)
评论
0赞
Maya Eldar
10/22/2023
谢谢@TarJae,但这两种解决方案都包括将设计列表插入到绘图函数中。我试图弄清楚是否有办法将列表保留在函数之外,即使代价是该列表中的函数之外有一个毫无意义的参数?
上一个:使用二进制数据创建单独的列
下一个:从日期提取年份
评论
fill.var = NULL
fill.var
fill.var