多个R函数具有和争论...
,使您可以传递任意数量的参数。 paste
函数就是一个例子,您可以向其提供任意数量的争论。但是有时,您可能不提前知道要传递多少论点。
例如,说我想在ggplot中生成一个图,在这里我想通过两列的组合为点着色:
df <- data.frame(x=rnorm(100),
y=rnorm(100),
cat1=sample(c(TRUE, FALSE), 100),
cat2=sample(c(TRUE, FALSE), 100),
cat3=sample(c(TRUE, FALSE), 100))
ggplot(df) + aes(x=x, y=y, col=paste(cat1,cat2) + geom_point()
但是现在考虑,我希望在运行时确定列的颜色。我想编写一个执行以下操作的函数:
library(rlang)
color_plot <- function(df, color_by) {
color_by = lapply(color_by, sym)
ggplot(df) + aes(x=x, y=y, col=paste(...=color_by)) + geom_point()
}
color_plot(df, list("cat1"))
color_plot(df, list("cat2", "cat3"))
color_plot(df, list("cat1", "cat2", "cat3"))
我想我正在寻找与python *args
等价的东西,如下所示:
args =[1,2,3]
my_fun(*args)
答案 0 :(得分:2)
使用syms
:
color_plot <- function(df, color_by) {
color_by <- syms(color_by)
ggplot(df) + aes(x=x, y=y, col=paste(!!!color_by)) + geom_point()
}
答案 1 :(得分:0)
如果您希望传递未加引号的列名而不是列表,则另一种方法是使用timeline:company1234
:
quos