如果我想要一个1-x
x轴,我有一个关于如何将参数传递给ggplot的问题。该函数用于在数据框中指定列名。
假设我的数据框看起来像
x1 x2 x3 x4
0.1 0.2 0.3 0.4
0.3 0.5 0.7 0.9
0.4 0.6 0.8 0.2
我有一个功能
myfunction<- function(x, y, convert = False){
if (flip) {
ggplot(data = mydata, aes(x=1-get(x), y=get(y))) + geom_line() +
xlab(x) + ylab(y)
} else {
ggplot(data = mydata, aes(x=get(x), y=get(y))) + geom_line() +
xlab(x) + ylab(y)
}
}
当convert = False时它可以工作,但如果我想绘制myfunction(x1, x2, convert = TRUE)
,我的x-lab仍然是"x1"
,而不是"1-x1"
。我试图编写xlab(1-get(x))
代码,但它不起作用。任何人都知道如何将x-label打印为"1-x1"
,其中x1是数据框中的列名?
答案 0 :(得分:1)
根据函数参数,似乎convert
是flip
。而不是使用get
来修改&#39; x&#39;参数,我们可以在将参数转换为quosures
mutate
执行此操作
myfunction<- function(mydata, x, y, convert = FALSE){
x <- enquo(x)
y <- enquo(y)
xnew <- quo_name(x)
if (convert) {
mydata %>%
mutate(!! (xnew) := 1- !!(x)) %>%
ggplot(., aes_string(xnew, quo_name(y))) +
geom_line() +
xlab(paste0("1 - ", xnew))
} else {
ggplot(mydata, aes_string(xnew, quo_name(y))) +
geom_line()
}
}
myfunction(df1, x1, x2, convert = TRUE)
-output
myfunction(df1, x1, x2, convert = FALSE)
-output
df1 <- structure(list(x1 = c(0.1, 0.3, 0.4), x2 = c(0.2, 0.5, 0.6),
x3 = c(0.3, 0.7, 0.8), x4 = c(0.4, 0.9, 0.2)), .Names = c("x1",
"x2", "x3", "x4"), class = "data.frame", row.names = c(NA, -3L
))