Подтвердить что ты не робот

Как я могу подавить номера строк, используя R CMD BATCH?

Если у меня есть R script:

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] на выходе, поэтому появляется только вывод script?

4b9b3361

Ответ 1

Да, 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 для анализа аргументов, как в других языках сценариев/

Ответ 2

Используйте 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 Обратите внимание на кавычки. Подробнее обсуждение здесь

UPDATE: изменилась строка shebang выше от #!/usr/bin/Rscript до #!/usr/bin/env Rscript в ответ на комментарий @mbq (спасибо!)

Ответ 3

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

EDIT: Хорошо, я неправильно понял ваш вопрос. У Дэвида это правильно.

Ответ 4

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

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

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") 

Печать:

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

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