传递参数在包装ggplot(Passing arguments to ggplot in a wra

2019-09-01 11:16发布

我需要包装GGPLOT2到另一个函数,并希望能够以同样的方式,他们接受了解析变量,可以有人指导我在正确的方向。

比方说,例如,我们考虑以下MWE。

#Load Required libraries.
library(ggplot2)

##My Wrapper Function.
mywrapper <- function(data,xcol,ycol,colorVar){
  writeLines("This is my wrapper")
  plot <- ggplot(data=data,aes(x=xcol,y=ycol,color=colorVar)) + geom_point()
  print(plot)
  return(plot)
}

虚拟数据:

##Demo Data
myData <- data.frame(x=0,y=0,c="Color Series")

现有的用法,其执行毫不费力:

##Example of Original Function Usage, which executes as expected
plot <- ggplot(data=myData,aes(x=x,y=y,color=c)) + geom_point()
print(plot)

目的使用语法:

##Example of Intended Usage, which Throws Error ----- "object 'xcol' not found"
mywrapper(data=myData,xcol=x,ycol=y,colorVar=c)

以上给出由GGPLOT2包,而且,我希望如何包起来在另一个函数的“原始”的使用的例子。 然而,包装抛出一个错误。

我相信这也适用于许多其他应用程序,它可能已经回答了一千遍,但是,我不知道这个问题是“所谓的”内R.

Answer 1:

这里的问题是,ggplot寻找一column名为xcol的数据对象。 我会建议改用aes_string并传递你想使用一个字符串,如映射列名:

mywrapper(data = myData, xcol = "x", ycol = "y", colorVar = "c")

并相应地修改您的包装:

mywrapper <- function(data, xcol, ycol, colorVar) {
  writeLines("This is my wrapper")
  plot <- ggplot(data = data, aes_string(x = xcol, y = ycol, color = colorVar)) + geom_point()
  print(plot)
  return(plot)
}

一些言论:

  1. 个人喜好,我用了很多的周围如空间x = 1 ,对我来说这大大提高了可读性。 不带空格的代码看起来像一个大的块。
  2. 如果返回的情节在函数外,我不会打印功能里面,只是在函数外。


Answer 2:

这仅仅是一个除了原来的答案,我不知道这是很旧的文章,但只是作为一个加法:

原来答案提供了以下代码来执行包装:

mywrapper(data = "myData", xcol = "x", ycol = "y", colorVar = "c")

在这里, data是作为一个字符串。 据我所知,这将无法正确执行。 只有内的变量aes_string被提供作为文字串,而data对象被传递到包装器作为对象。



文章来源: Passing arguments to ggplot in a wrapper