首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何沉默写入终端/文件的特定消息(当通过bash脚本调用“Rscript”时)

如何沉默写入终端/文件的特定消息(当通过bash脚本调用“Rscript”时)
EN

Stack Overflow用户
提问于 2019-03-27 17:13:51
回答 1查看 132关注 0票数 1

我正在编写一个bash脚本(在Linux系统上从终端调用),它在使用一些简单的用户输入启动“rscript”之前创建一个日志文件。然而,我在控制日志文件(或发送到终端)中包含了哪些消息时遇到了问题,并且无法找到任何解决方案来排除一个特定的R包加载消息:

包装WGCNA 1.66装载。

换句话说,我需要一种(仅)沉默这个特定消息的方法,它是在WGCNA包成功加载时打印出来的。

我将尽量保持代码的非特定性,希望能够使代码更容易理解。

下面的块是一个框架(不包括一些不相关的代码),然后是我尝试过的一些不同的变体。首先,我尝试使用接收器()和suppressPackageStartupMessages()控制R脚本的输出,我认为这已经足够了。

bash脚本

代码语言:javascript
复制
#!/usr/bin/env bash

read RDS
DATE=`date +%F-%R`
LOG=~/path/log/$DATE.log
touch $LOG
export ALLOW_WGCNA_THREADS=4
Rscript ~/path/analysis.R $RDS $DATE $LOG

R脚本

代码语言:javascript
复制
#!/usr/bin R

# object set-up
rds.path <- "~/path/data/"
temp.path <- "~/path/temp/"
pp.data <- readRDS(paste0(rds.path, commandArgs(T)[1]))
file.date <- paste0(commandArgs(T)[2], "_")

# set up error logging
log.file <- file(commandArgs(T)[3], open="a")
sink(log.file, append=TRUE, type="message")
sink(log.file, append=TRUE, type="output")

# main pkg call
if(suppressPackageStartupMessages(!require(thePKG))){
  stop("\nPlease follow the below link to install the requested package (thePKG) with relevant dependencies\n https://link.address")
}

# thePKG method call
cat("> Running "method"\n", append=TRUE)
module <- method(thePKG_input = pp.data, ppi_network = ppi_network)

# reset sink and close file connection
sink(type="message")
sink(type="output")
close(log.file)

这不会向终端输出任何内容(这很好),包括日志文件中的以下内容:

包WGCNA 1.66装载.运行“方法” 错误:添加错误以验证它是否正确地打印到文件中

我想保持我的日志文件尽可能干净和点(并避免在终端中的杂乱),并为此希望删除包加载消息。我试过以下方法..。

i.省略R脚本中的接收器()调用,并添加

代码语言:javascript
复制
&>> $LOG

去打“Rscript”的电话。产生与上面相同的文件输出。

ii.i相同,但将suppressPackageStartupMessages()替换为suppressMessages(),这将产生与上面相同的文件输出。

iii.i相同,但添加了

代码语言:javascript
复制
... require(thePKG, quietly=TRUE)

在R脚本#主pkg调用中,结果相同。

在这些地方,我找到了可能的解决方案,并尝试了不同的变化,但没有取得积极的结果。

我还想知道WGCNA包是否在thePKG的!require循环的“外部”加载,因为它不受该调用的suppressMessages()的影响。但是,在if-require(thePKG)-call之前引入一个有意的错误(它终止了进程)删除了消息--在循环中提示消息的启动。我还尝试在R脚本开始时单独调用WGCNA,并在其中添加了一个suppressMessages(),但这也不起作用。bash脚本中使用的导出函数不会影响结果(据我所知),并且删除它将加载消息扩展到包括以下内容(截断以节省空间):

包装WGCNA 1.66装载。 注意:您的系统似乎支持多线程,但在R中的WGCNA中没有启用它。 若要允许在WGCNA中使用所有可用内核的多线程,请使用R中的allowWGCNAThreads()在必要时使用disableWGCNAThreads()来禁用线程。 (...)

我知道我可以将输出(仅)发送到/dev/null,但是还有其他输出打印到我仍然想要的文件中(例如>运行“方法”)。

有人对如何删除这条消息有建议吗?我对R编程非常陌生,刚开始使用Linux (Ubuntu ),所以在回答时请记住这一点。

提前谢谢。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55383000

复制
相关文章

相似问题

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