R / Sweave аргументы - PullRequest
       14

R / Sweave аргументы

5 голосов
/ 22 февраля 2012

Я использую R и Sweave для генерации отчета.

R CMD Sweave MyReport.Rnw

Я хочу иметь возможность отправлять аргументы в Rкод, потому что отчет, конечно, "Динамический" . Итак, я хотел бы иметь возможность сделать что-то вроде этого:

R CMD SWeave MyReport.Rnw PatientId =5

... и код R считывает значение PatientId в переменной ...

Как мне это сделать?Кто-то упоминал об использовании переменных среды, но это кажется не элегантным решением.

Ответы [ 2 ]

6 голосов
/ 23 февраля 2012

Чтобы получить аргументы, передаваемые из командной строки R, вы можете использовать функцию commandArgs(), но, к сожалению, R CMD Sweave не поддерживает дополнительные параметры командной строки.Тем не менее, вы все равно можете вызвать Sweave с помощью R -e, например,

R -e "Sweave('MyReport.Rnw')" --args PatientId=1

В MyReport.Rnw вы выполняете некоторую обработку текста на commandArgs(TRUE), которая в этом случае дает вам строку символов PatientId=1.

Но я считаю, что лучше использовать функцию Sweave() в R-скрипте напрямую ;Например, в этом случае вы можете записать процесс в виде сценария, например

PatientId <- 1
Sweave("MyReport.Rnw")

, а в MyReport.Rnw вы напрямую используете глобальную переменную PatientId.Если вы хотите создать серию отчетов, вы можете даже использовать цикл для PatientId.

1 голос
/ 22 февраля 2012

Вам нужно «записать» значение, где оно может быть «прочитано»:

  • Переменные окружения, как уже упоминалось, являются простым подходом с sys.getenv()

  • файлы конфигурации или данных, которые вы можете прочитать

  • хранилище базы данных

и т. Д. Напомним, что код R действительно выполнено , поэтому вы всегда можете сделать два шага:

rScriptOne.r                   # write to foo.txt
R CMD Sweave MyReport.Rnw      # reads from foo.txt
...