首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >可以从函数返回公式吗?

可以从函数返回公式吗?
EN

Stack Overflow用户
提问于 2015-04-25 03:48:02
回答 1查看 79关注 0票数 0

我是个懒惰的人,所以我不想一次又一次地输入相同的代码(甚至不复制和粘贴:P)。我想知道是否有可能编写一个函数,将一些文本字符串作为公式返回,所以下一次,当我想使用这个赞扬包时,我只需调用这个函数,整个代码就会自动粘贴进来。

例如,这一次,我使用ggplot2生成一些方框图,并希望对我的绘图进行一些自定义。所以我有

代码语言:javascript
运行
复制
ggplot(abc, aes(group, abcabc))+geom_boxplot(aes(fill=group)) + 
geom_hline(yintercept=0, color="grey") +
theme(panel.background=element_rect(fill = "white")) +
scale_fill_manual(values = c("white", "white"))

您可以看到最后两行代码只是在做一些格式化设置。我可以使用这两行代码时,每次我想要生成这种格式的框图在未来。如果我可以编写一个函数,可以将这两行代码作为公式返回,那么以后我就可以将该函数用作ggplot中的一些主题。所以我试着写一个这样的函数:

代码语言:javascript
运行
复制
box.format<-function(){
            return(as.formula('theme(panel.background=element_rect(fill = "white")) + scale_fill_manual(values = c("white", "white"))'))
}

然而,我收到这样一条信息:

错误:不知道如何向主题对象添加scale_fill_manual(value= c("white","white"))

是否有人知道如何修复此错误,或者是否有其他方法可以修复此错误?

EN

回答 1

Stack Overflow用户

发布于 2015-04-25 20:01:59

我想你可以试着结束。下面是一个快速的试验,尽管它没有得到充分的测试。理想情况下,您应该能够使用闭包创建自己的函数工厂。

代码语言:javascript
运行
复制
mygg <- function(...) {
  function(data, x, y) {
    ggplot(data, aes(x, y))+geom_boxplot(aes(fill=x)) + 
      geom_hline(yintercept=0, color=color_param) +
      theme(panel.background=element_rect(fill = back_param)) +
      scale_fill_manual(values = c(scale_param_x, scala_param_y))    
  }
}

gg <- mygg(color_param = "grey", back_param = "white", scale_param_x = "white", scale_param_y = "white")
gg
function(data, x, y) {
  ggplot(data, aes(x, y))+geom_boxplot(aes(fill=x)) + 
    geom_hline(yintercept=0, color=color_param) +
    theme(panel.background=element_rect(fill = back_param)) +
    scale_fill_manual(values = c(scale_param_x, scala_param_y))    
}
<environment: 0x0000000018d7cea0>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29860781

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档