R 函数参数仅调用列名的一部分(ggplot)
我成功地建立了我的第一个功能I R。 我现在想改进它,但不知道如何改进 我的数据集包含许多变量,这些变量具有几乎相同名称的“镜像”变量。唯一的命名差异是“mirror”变量的名称前面有一个“c” 该函数绘制变量(VAR)与其“镜像”(cVAR)的比较图 复制挑战的简化数据集和简化函数代码:R 函数参数仅调用列名的一部分(ggplot),r,function,ggplot2,R,Function,Ggplot2,我成功地建立了我的第一个功能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,mea
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)
但我在R中找不到类似的方法。希望这是您想要的。我只需使用定义的
myLetter
粘贴0VAR
,并将VAR
作为字符传递给compare()
compare <- function(VAR, myLetter = "c") {
library(ggplot2)
VAR2 <- paste0(myLetter, VAR)
ggplot(df, aes_string(VAR, VAR2))+
geom_point() +
geom_smooth(method = "lm")+
geom_abline(intercept = 0, slope = 1)
}
compare("Y")
比较这个怎么样
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)
}
非常感谢。我看到您还使用stopifnot函数进一步改进了该函数。这实际上非常有用:-)
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)
}
compare(Y) # to cY
compare(X) # to cX
compare(Y, cY)
compare(Y, cX)