r - 仅调用列名的一部分的函数参数 (ggplot)

标签 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,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/

相关文章:

r - 使用 geom_segment 按因素分组数据

javascript - Shiny htmlOutput 中的 for 循环未按顺序执行

javascript - 正则表达式来匹配 javascript 函数的定义并确保它返回一些东西?

Python 内部中断函数

r - ggplot stacked bar - 隐藏标签但保留标签定位

r - 如何使用 ggplot 在 r 中创建堆积条形图

r - 为什么这个 POSIXct 或 ITime 会丢失其格式/属性

从相关系数计算中删除异常值

r - 修改 `citation`中的 `R`对象

function - ARM 汇编语言中的两个函数/子例程