【问题标题】:Disable plot display in R禁用 R 中的绘图显示
【发布时间】:2014-07-15 23:59:49
【问题描述】:

我正在尝试关闭 R 中的绘图显示。

我阅读了Disable GUI, graphics devices in R,但给出的唯一解决方案是将绘图写入文件。

如果我不想污染工作区,如果我没有写权限怎么办? 我试过options(device=NULL),但没用。

上下文是包NbClust :我想要NbClust() 返回的内容,但我不想显示它的情节。

提前致谢!

编辑:这是一个使用来自rattle包的数据的可重复示例:)

data(wine, package="rattle")
df <- scale (wine[-1])

library(NbClust)

# This produces a graph output which I don't want
nc <- NbClust(df, min.nc=2, max.nc=15, method="kmeans")

# This is the plot I want ;)
barplot(table(nc$Best.n[1,]), 
    xlab="Numer of Clusters", ylab="Number of Criteria",
    main="Number of Clusters Chosen by 26 Criteria")

【问题讨论】:

  • 举一个可重现的例子。当我在help(NbClust) 中运行第一个示例时,NbClust 不会生成图表
  • 您是否有权使用tempfile() 创建临时文件?
  • 我在一个可重现的示例中进行了编辑 :) 我刚刚查看了 tempfile(),谢谢!写入 tmp 目录似乎是关闭绘图显示的一个不错的选择。
  • 这台机器是什么操作系统?你能写到 NULL 设备(windows 中的 NUL 或 linux 中的 /dev/null 吗?)如果是,那么你可以直接在那里输出。
  • 生成图表而不提供不生成图表的选项非常糟糕。我会要求开发人员提供plot=FALSE 选项。

标签: r plot


【解决方案1】:

你可以把调用换成

pdf(file = NULL)

dev.off()

这会将所有输出发送到一个有效隐藏它的空文件。

【讨论】:

    【解决方案2】:

    幸运的是,NbClust 似乎是一个巨大的混乱函数,其中包含一些其他函数和许多看起来很恶心的代码。绘图在两个地方之一完成。

    创建NbClust的副本:

    > MyNbClust = NbClust
    

    然后编辑这个函数。将标题更改为:

    MyNbClust <-
        function (data, diss = "NULL", distance = "euclidean", min.nc = 2, 
                  max.nc = 15, method = "ward", index = "all", alphaBeale = 0.1, plotetc=FALSE) 
    {
    

    然后将绘图代码包装在if 块中。第 1588 行附近:

        if(plotetc){
            par(mfrow = c(1, 2))
            [etc]
            cat(paste(...
        }
    

    在第 1610 行附近也是如此。保存。现在使用:

     nc = MyNbClust(...etc....)
    

    除非您添加 plotetc=TRUE,否则您看不到任何图。

    然后要求开发人员包含您的补丁。

    【讨论】:

    • 第 1610 行?这个函数有多大...检查 NbClust。哦,亲爱的 - 我猜你使用 grep 来查找绘图命令,因为我希望你没有搜索整个函数。
    • 是的,在我的编辑器中搜索就可以了。这一切都在一个函数中的好处是,不用担心用户空间副本找不到包中未导出的东西......
    猜你喜欢
    • 2018-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-31
    • 2022-07-22
    • 2014-08-21
    • 1970-01-01
    相关资源
    最近更新 更多