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")