Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R/nse/将变量双重移交给子功能_R_Function_Ggplot2_Nse_Direct Labels - Fatal编程技术网

R/nse/将变量双重移交给子功能

R/nse/将变量双重移交给子功能,r,function,ggplot2,nse,direct-labels,R,Function,Ggplot2,Nse,Direct Labels,为了可用性,我有两个函数要包装在一个包装函数中。包装函数包括一个变量,即数据帧中的列名,该变量应从包装函数传递给其中一个子函数 强简化示例: 子功能1:创建数据 注意,据我所知,directlabels::geom_dl不接受aes_字符串作为解决方法。因此,我似乎无法将gvar作为字符串移交给函数。在最新版本的ggplot中,您没有使用deparse/substitute或aes_字符串。您只使用新的Quasinotion语法。在这个例子中,您应该 plotfun <- function

为了可用性,我有两个函数要包装在一个包装函数中。包装函数包括一个变量,即数据帧中的列名,该变量应从包装函数传递给其中一个子函数

强简化示例:

子功能1:创建数据 注意,据我所知,directlabels::geom_dl不接受aes_字符串作为解决方法。因此,我似乎无法将gvar作为字符串移交给函数。

在最新版本的ggplot中,您没有使用deparse/substitute或aes_字符串。您只使用新的Quasinotion语法。在这个例子中,您应该

plotfun <- function(df, gvar) {

   ggplot2::ggplot(df, ggplot2::aes(x = x, y = y, color = {{gvar}})) +
     ggplot2::geom_line() +
     directlabels::geom_dl(ggplot2::aes(label = {{gvar}}), method = list("last.points"))

}

然后,您的函数将直接工作,并在工作的wrapfun

中工作-但您的代码包含一些来自aes_字符串的残余。应该是:``plotfun@TimmS。你是对的。很抱歉。删除了引号。
plotfun <- function(df, gvar) {

    gvar_q = deparse(substitute(gvar))

    g <- ggplot2::ggplot(df, ggplot2::aes_string(x = "x", y = "y", color = gvar_q)) +
        ggplot2::geom_line() +
        directlabels::geom_dl(ggplot2::aes(label = {{gvar}}), method = list("last.points"))

    g
}
wrapfun <- function(gvar) {

    dat <- datafun()
    plot <- plotfun(df = dat, gvar = {{gvar}})

    plot
}
#works
d <- datafun()
plotfun(d, gvar = ga)
# doesn't work
wrapfun(gvar = ga)
>Error in FUN(X[[i]], ...) : object 'ga' not found
plotfun <- function(df, gvar) {

   ggplot2::ggplot(df, ggplot2::aes(x = x, y = y, color = {{gvar}})) +
     ggplot2::geom_line() +
     directlabels::geom_dl(ggplot2::aes(label = {{gvar}}), method = list("last.points"))

}