Как я могу подавить номера строк, используя 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?
Ответы
Ответ 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")
Печать:
мы получаем сигнал
Если вы используете печать как отладчик для бедняков... Мы не смеемся над вами, мы смеемся над вами.