Я пишу сценарий bash (который будет вызываться из терминала - в системе Linux), который создает файл журнала перед инициацией «rscript» с использованием некоторого простого пользовательского ввода.Однако я сталкиваюсь с проблемами в управлении тем, какие сообщения включены в файл журнала (или отправлены на терминал), и не могу найти никакого решения для исключения одного конкретного сообщения загрузки пакета R:
Пакет WGCNA 1.66 загружен.
Другими словами, мне нужен способ (только) заставить замолчать это конкретное сообщение, которое выводится при успешной загрузке пакета WGCNA.
Я будупостарайтесь, чтобы код был неконкретным, чтобы можно было упростить его выполнение.
Блок ниже представляет собой скелет (исключая некоторый нерелевантный код), и за ним последуют несколько разных вариантов, которые я пробовал.Где изначально я пытался управлять выводом из скрипта R, используя sink () и suppressPackageStartupMessages () , чего, как я думал, должно было быть достаточно.
скрипт bash :
#!/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 :
#!/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. Пропустить вызов sink () из сценария R и добавить
&>> $LOG
для вызова bs 'Rscript'.В результате выводится тот же файл, что и выше.
ii. То же, что и i , но замена suppressPackageStartupMessages () на suppressMessages (), что приводит к тому же выводу файла, что и выше.
iii. То же, что и i , но добавлено
... require(thePKG, quietly=TRUE)
вR script # main pkg call , с теми же результатами.
Это потенциальные решения, с которыми я сталкивался и пробовал в разных вариациях без положительных результатов.
Мне также было интересно, был ли пакет WGCNA загружен «вне» цикла! Require thePKG, поскольку на него не влияют suppressMessages () для этого вызова.Но введение преднамеренной ошибки (которая завершила процесс) до вызова if-require (thePKG) удалило сообщение - намекало на его инициацию внутри цикла.Я также попытался вызвать WGCNA самостоятельно в начале сценария R, добавив к нему suppressMessages () , но это тоже не сработало.Функция экспорта, используемая в скрипте bash, не влияет на результат (насколько мне известно), и удаление его расширяет сообщение загрузки, чтобы включить следующее (усеченное для экономии места):
Пакет WGCNA 1.66 загружен.
Важное примечание. Похоже, что ваша система поддерживает многопоточность, но она не включена в WGCNA в R.
Чтобы разрешить многопоточность в WGCNA со всеми доступными ядрами, используйте allowWGCNAThreads() в R. Используйте disableWGCNAThreads (), чтобы отключить многопоточность, если это необходимо.
(...)
Я знаю, что могу отправить вывод (только) в / dev / null, но в файл выводятся другие выходные данные (например,> «Запуск метода»), которые мне все еще нужны.
У кого-нибудь есть предложения по удалению этого сообщения?Я очень новичок в программировании на R и только что начал использовать Linux (Ubuntu LTS), поэтому помните об этом при ответе.
Заранее спасибо.