如何将向量传递到函数的点(...)参数

时间:2018-08-08 17:08:12

标签: r

多个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)

2 个答案:

答案 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