Как я могу подавить вывод номеров строк с помощью R CMD BATCH?

Если у меня есть R-скрипт:

print("hi")
commandArgs()

И я запускаю его, используя:

r CMD BATCH --slave --no-timing test.r output.txt

Вывод будет содержать:

[1] "hi"
[1] "/Library/Frameworks/R.framework/Resources/bin/exec/x86_64/R"
[2] "-f"                                                         
[3] "test.r"                                                     
[4] "--restore"                                                  
[5] "--save"                                                     
[6] "--no-readline"                                              
[7] "--slave"                                                    

Как я могу подавить номера строк [1]... [7] в выводе, чтобы отображался только вывод скрипта?


person tommy chheng    schedule 17.07.2010    source источник
comment
@ aL3xa Если бы вы написали в качестве ответа, я бы, вероятно, проголосовал за него. Но в качестве комментария я пропустил это - подумав, какое отношение имеет cat к чему-либо? :)   -  person David J.    schedule 22.09.2011


Ответы (4)


Да, mbq подходит — используйте Rscript или, если это вас не устраивает, littler. :

$ cat /tmp/tommy.r 
#!/usr/bin/r

cat("hello world\n")
print(argv[])
$ /tmp/tommy.r a b c
hello world
[1] "a" "b" "c"
$

Вы, вероятно, захотите взглянуть на пакеты CRAN getopt и optparse для синтаксического анализа аргументов, как в других языках сценариев/

person Dirk Eddelbuettel    schedule 17.07.2010
comment
Этот ответ вводит в заблуждение. Я не думаю, что проблема в том, как вызывается скрипт R. Решение состоит в том, чтобы использовать cat вместо print. - person David J.; 22.09.2011

Используйте cat вместо print, если вы хотите скрыть номера строк ([1], [2], ...) в выводе.

Я думаю, вы также захотите передать аргументы командной строки. Я думаю, что самый простой способ сделать это — создать файл с RScript shebang:

Например, создайте файл с именем args.r:

#!/usr/bin/env Rscript
args <- commandArgs(TRUE)
cat(args, sep = "\n")

Сделайте его исполняемым с помощью chmod +x args.r, а затем вы сможете запустить его с помощью ./args.r ARG1 ARG2

FWIW, передача параметров командной строки с синтаксисом R CMD BATCH ... - это боль. Вот как это сделать: R CMD BATCH "--args ARG1 ARG2" args.r Обратите внимание на кавычки. Дополнительные обсуждения здесь

ОБНОВЛЕНИЕ: изменена строка shebang выше с #!/usr/bin/Rscript на #!/usr/bin/env Rscript в ответ на комментарий @mbq (спасибо!)

person David J.    schedule 22.09.2011
comment
Это не слишком удачно, так как Rscript скачет по файловой системе в различных дистрибутивах (и 32-64-битных версиях). Тем не менее, env здесь, чтобы спасти положение, а #!/usr/bin/env Rscript всегда должно работать. - person mbq; 22.09.2011
comment
@mbq, хотя моему оригинальному шебангу не повезло, ваш комментарий был, так что спасибо - person David J.; 27.09.2011

Используйте commandArgs(TRUE) и запустите свой скрипт с помощью Rscript.

РЕДАКТИРОВАТЬ: Хорошо, я неправильно понял ваш вопрос. Дэвид прав.

person mbq    schedule 17.07.2010
comment
Хотя использование commandArgs(TRUE) является хорошим приемом при анализе команд, оно не решает вопрос, а именно, как подавить [1], [2] и т.д. - person David J.; 22.09.2011
comment
@DavidJames Правда, вопрос вводил в заблуждение, поэтому этот ответ. - person mbq; 22.09.2011

Остановить Rscript от нумерации команд вывода из печати

По умолчанию R делает print(...) нумерацией команд перед stdout следующим образом:

print("we get signal")

Производит:

[1] "мы получаем сигнал"

Rscript позволяет пользователю изменять определение таких функций, как print, поэтому по умолчанию он служит нашей цели:

print = cat
print("we get signal")

Производит:

мы получаем сигнал

Обратите внимание, что нумерация команд и двойные кавычки исчезли.

Получите больше контроля над печатью, используя функции первого класса R:

my_print <- function(x, ...){ 
    #extra shenanigans for when the wind blows from the east on tuesdays, go here. 
    cat(x) 
} 
print = my_print 
print("we get signal") 

Отпечатки:

мы получаем сигнал

Если вы используете print как отладчик для бедных... Мы смеемся не над вами, мы смеемся вместе с вами.

person Eric Leschinski    schedule 15.07.2019