r - 使用 NSE 在函数中调用 ggplot

标签 r ggplot2 func nse

想法是在函数中修补对 ggplot 的调用。

例子:

library(dplyr)
library(ggplot2)
library(lazyeval)

df <- data.frame(A=letters[1:10], B=2:11, C=3:12))

func <- function(name, dat=df) {

  output <- dat %>%
    select_(~A,name) %>%
    arrange_(interp(~desc(var), var=as.name(name)))

  plot <- 
    ggplot(output, aes_string(x=reorder(~A,-name), y=B)) +
    geom_bar(stat='identity')

  print(plot)
  return(plot)

}

result <- func("B")

编译给出:

Error in -name : invalid argument to unary operator.

我尝试了deparsesubstitute。不确定我得到了正确的组合。有任何想法吗?

最佳答案

在将数据传递给 ggplot 之前重新排序数据。下面的代码还在 ggplot 调用中移动了一些列名,因为否则你总是在绘制 AB,不管name 参数——还是故意的?

function (dat, name) {
    var = as.name(name)
    reord = list(interp(~ reorder(var, -var), var = var))
    output = dat %>%
        select_(~A, name) %>% # Not actually necessary.
        arrange_(interp(~ desc(var), var = var)) %>%
        mutate_(.dots = setNames(reord, name))

    plot = ggplot(output, aes_string(x = 'A', y = name)) +
        geom_bar(stat = 'identity')

    plot(plot)
    plot
}

func(df, 'B')

我在这里使用 mutate_(.dots = …) 形式。查看 dplyr 的“NSE”小插图,了解有关其用法的更多信息。

关于r - 使用 NSE 在函数中调用 ggplot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32692687/

相关文章:

r - 我怎么不能读取文件中的最后一行?

r - 如何用ggplot填充区间内的密度图?

c# - 从 Func<object,string> 到 Func<string,string> 的转换有效,但到 Func<int,string> 失败

ninject - Ninject 是否支持 Func(自动生成工厂)?

r - 用于包安装的 false R 版本

r - 为什么聚类图标签使用行而不是 ID 列中的名称?

r - ggplot2:即使 drop=FALSE,图例也不显示所有类别

r - 此代码在 R 中生成一条曲线。如何更改此曲线的颜色?

r - ggplot2:aspect.ratio 胜过 coord_equal 或 coord.fixed

asp.net-mvc - 带参数编译的 Lambda 表达式