R 将列名传递给函数

R 将列名传递给函数,r,ggplot2,dplyr,R,Ggplot2,Dplyr,如何将此ggplot()调用转换为函数?我不知道如何让R识别我要传递给函数的列名。我遇到过几个听起来类似的问题,但我还没有成功地适应这些想法。有关替换(),请参见 #设置 图书馆(dplyr) 图书馆(GG2) 种子(205) dat=数据帧(t=重复(1:2,每个=10), 成对=重复(1:10,2), 值=rnorm(20)) #工作示例 ggplot(数据%>%分组依据(对)%>% 变异(斜率=(值[t==2]-值[t==1])/(2-1)), aes(t,值,组=对,颜色=斜率>0))+

如何将此
ggplot()
调用转换为函数?我不知道如何让R识别我要传递给函数的列名。我遇到过几个听起来类似的问题,但我还没有成功地适应这些想法。有关
替换()
,请参见

#设置
图书馆(dplyr)
图书馆(GG2)
种子(205)
dat=数据帧(t=重复(1:2,每个=10),
成对=重复(1:10,2),
值=rnorm(20))
#工作示例
ggplot(数据%>%分组依据(对)%>%
变异(斜率=(值[t==2]-值[t==1])/(2-1)),
aes(t,值,组=对,颜色=斜率>0))+
几何点()+
geom_线()+
统计汇总(fun.y=平均值,geom=“line”,lwd=2,aes(组=1))
#试图变成一个函数
plotFun%
突变(斜率=interp(~(dv2[time2==2]-dv2[time2==1])/(2-1),
dv2=as.name(dv),
time2=as.name(time)),
aes(时间、dv、组=分组比、颜色=斜率>0))+
几何点()+
geom_线()+
统计汇总(fun.y=平均值,geom=“line”,lwd=2,aes(组=1))
}
plotFun(dat,“成对”,“值”,“t”)
代码运行,但绘图不正确:

geom_路径:每组仅由一个观测值组成。你需要吗 调整群体审美观


以下是所有评论者提供的工作解决方案:

# setup
  library(dplyr)
  library(ggplot2)
  library(lazyeval)
  set.seed(205)
  dat = data.frame(t=rep(1:2, each=10), 
                   pairs=rep(1:10,2), 
                   value=rnorm(20))


# function
  plotFun <- function(df, groupBy, dv, time) {
      ggplot(df %>% group_by_(groupBy) %>%
             mutate_(slope = interp(~(dv2[time2==2] - dv2[time2==1])/(2-1),
                                      dv2=as.name(dv), 
                                      time2=as.name(time))),
             aes_string(time, dv, group = groupBy, 
                        colour = 'slope > 0')) +
        geom_point() +
        geom_line() +
        stat_summary(fun.y=mean,geom="line",lwd=2,aes(group=1))
  }

# plot
  plotFun(dat, "pairs", "value", "t")
#设置
图书馆(dplyr)
图书馆(GG2)
图书馆(懒汉)
种子(205)
dat=数据帧(t=重复(1:2,每个=10),
成对=重复(1:10,2),
值=rnorm(20))
#作用
plotFun%分组依据(分组依据)%>%
突变(斜率=interp(~(dv2[time2==2]-dv2[time2==1])/(2-1),
dv2=as.name(dv),
time2=as.name(time)),
aes_字符串(时间,dv,组=groupBy,
颜色='坡度>0'))+
几何点()+
geom_线()+
统计汇总(fun.y=平均值,geom=“line”,lwd=2,aes(组=1))
}
#密谋
plotFun(dat,“成对”,“值”,“t”)

有关编程-获取字符串名称的信息,请参见
分组依据
变异
。@MichaelGriffiths是对的,您应该查看非标准评估()谢谢。这对我来说是个新概念。我觉得我不太了解这个结构。例如:
总结(mtcars,“平均(mpg)”)
。翻译到我的例子:
mutate_u2;(“slope=(dv[time==2]-dv[time==1])/(2-1)”
。@EricGreen我发现dplyr的系统在这方面也非常混乱。问题有帮助吗?整个问题应该是
aes\u字符串(时间,dv,group=groupBy,color='slope>0')
。其他一切都保持不变,这对我很有用。
library(dplyr)
library(ggplot2)
library(lazyeval)

plotFun <- function(df, groupBy, dv, time) {
    ggplot(df %>% group_by_(groupBy) %>%
             mutate_(slope = interp(~(dv2[time2==2] - dv2[time2==1])/(2-1),
                                    dv2=as.name(dv), 
                                    time2=as.name(time))),
           aes(time, dv, group=groupBy, colour=slope > 0)) +
      geom_point() +
      geom_line() +
      stat_summary(fun.y=mean,geom="line",lwd=2,aes(group=1))
  }

plotFun(dat, "pairs", "value", "t")
# setup
  library(dplyr)
  library(ggplot2)
  library(lazyeval)
  set.seed(205)
  dat = data.frame(t=rep(1:2, each=10), 
                   pairs=rep(1:10,2), 
                   value=rnorm(20))


# function
  plotFun <- function(df, groupBy, dv, time) {
      ggplot(df %>% group_by_(groupBy) %>%
             mutate_(slope = interp(~(dv2[time2==2] - dv2[time2==1])/(2-1),
                                      dv2=as.name(dv), 
                                      time2=as.name(time))),
             aes_string(time, dv, group = groupBy, 
                        colour = 'slope > 0')) +
        geom_point() +
        geom_line() +
        stat_summary(fun.y=mean,geom="line",lwd=2,aes(group=1))
  }

# plot
  plotFun(dat, "pairs", "value", "t")