我已经成功构建了我的第一个函数 i R。 我现在想改进它,但不知道如何。
我的数据集包含许多具有几乎相同名称的“镜像”变量的变量。唯一的命名差异是“mirror”变量的名称前面有一个“c”。
该函数绘制变量 (VAR) 与其“镜像”(cVAR) 的比较。
重现挑战的简化数据集和简化函数代码:
library(ggplot2)
df <- data.frame(
X = 1:10+rnorm(10,mean=1,sd=0.5),
cX = 1:10+rnorm(10,mean=1,sd=0.5),
Y = 1:10+rnorm(10,mean=1,sd=0.5),
cY = 1:10-rnorm(10,mean=1,sd=0.5))
compare <- function(VAR, cVAR) {
VAR <- deparse(substitute(VAR))
cVAR <- deparse(substitute(cVAR))
ggplot(df, aes_string(x=VAR, y=cVAR))+
geom_point()+
geom_smooth(method="lm")+
geom_abline(intercept = 0, slope = 1)
}
compare(Y, cY)
我希望该函数执行与上面完全相同的操作,但我只想编写compare(Y)。
在 STATA 中我会尝试这样的事情:
y=c`VAR'
但我在 R 中找不到类似的方法。
最佳答案
这个怎么样
compare <- function(VAR, cVAR) {
VAR <- deparse(substitute(VAR))
cVAR <- if(missing(cVAR)) {
paste0("c", VAR)
} else {
deparse(substitute(cVAR))
}
stopifnot(all(c(VAR, cVAR) %in% names(df)))
ggplot(df, aes_string(x=VAR, y=cVAR))+
geom_point()+
geom_smooth(method="lm")+
geom_abline(intercept = 0, slope = 1)
}
基本上,当未指定第二个参数时,我们只是使用 paste0()
将“c”添加到第一个参数。
然后您可以运行其中任何一个
compare(Y) # to cY
compare(X) # to cX
compare(Y, cY)
compare(Y, cX)
关于r - 仅调用列名的一部分的函数参数 (ggplot),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47224724/