我已经成功构建了我的第一个函数i R. 我现在想改进它,但不知道如何。
我的数据集包含许多具有“镜像”变量的变量,这些变量具有几乎相同的名称。唯一的命名区别是“镜像”变量在名称前面有一个“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)
我希望该函数与上面的函数完全相同,但我只想写比较(Y)。
在STATA我会尝试这样的事情:
y=c`VAR'
但我在R中找不到类似的方法。
答案 0 :(得分:2)
这个怎么样
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)
答案 1 :(得分:1)