Передача скрипта в качестве параметра в RGui - PullRequest
5 голосов
/ 04 августа 2011

Мне было интересно, можно ли передать параметры в RGui из командной строки в Windows.Я хотел бы сделать что-то вроде

RGui myScript.r param1 param2

так же, как я бы сделал с RScript, но мне нужно отобразить графический интерфейс.

Вот еще немного информации относительно моих потребностей.Я хочу встроить графический интерфейс, написанный на R, в мое приложение на C #.Что произойдет, если я нажму кнопку в форме, и приложение запустит процесс, который вызывает RGui с моим сценарием и некоторыми параметрами.До сих пор это работало нормально с RScript, но теперь, когда я отображаю графику, мне нужно, чтобы R находился в интерактивном режиме.Вот код, который я использую:

        myProcess.StartInfo.FileName =Pathing.GetUNCPath( r_path) + "\\Rscript";
        string script_path=Directory.GetParent(AppDomain.CurrentDomain.BaseDirectory).Parent.Parent.Parent.FullName.ToString();
        myProcess.StartInfo.Arguments = Pathing.GetUNCPath(script_path) + "\\display.r " + data_path;
        myProcess.StartInfo.UseShellExecute = true;           
        myProcess.Start();
        myProcess.WaitForExit();

Ответы [ 2 ]

7 голосов
/ 05 августа 2011

Как уже говорилось, вы обычно не можете этого сделать.Если вы взломаете свой Rprofile или Rprofile.site (см. «Запуск» для получения дополнительной информации или этот сайт ), вы можете обойти это, но код не переносится на другие компьютеры.Поэтому, если вы чувствуете себя действительно удачливым и дерзким, вы можете попытаться сделать следующее.

Вы добавляете этот код в файл Rprofile или Rprofile.site (который находится в папке / etc вашего Rустановить):

Args <- commandArgs(trailingOnly=TRUE)
if(length(Args)>0 & sum(grepl(" -f ",commandArgs()))==0 ){          
    if(grepl("(?i).r$",Args[1])){
        File <- Args[1]
        Args <- Args[-1]
        tryCatch(source(File) , error=function(e) print(e) )
    }
}

Это позволит вам сделать:

Rgui --args myscript.r arg1 arg2
Rscript myscript.r arg1 arg2
R --args myscript.r arg1 arg2
R -f myscript.r --args arg1 arg2

Аргумент --args позаботится о всплывающих окнах, о которых предупреждает @iterator.Код приведет к переменной Args, которая содержится в базовой среде (которая не .GlobalEnv!).Эта переменная содержит все аргументы, кроме имени файла.Впоследствии вы можете получить к нему доступ из своего скрипта, например:

#dumb script
print(Args)

Если вызывается с помощью Rgui или R, также будет переменная File, которая содержит имя файла, который был получен.

Напоминаем, что изменение вашего rProfile не переносимо на другие компьютеры.Так что это только для личного использования.Вы также можете не указывать -f в качестве параметра после --args, иначе вы получите ошибки.

Редактировать: лучше искать «-f», чем «-f», так как это может произойти в «пути»./to/new-files/".

3 голосов
/ 04 августа 2011

(ОБНОВЛЕНО) ПРЕДУПРЕЖДЕНИЕ: это будет «работать», но крайне опрометчиво.Насколько я могу судить, Rgui не должен принимать такие параметры скрипта.@Joris указал мне, что список допустимых параметров указан в Rgui --help.

Если вы будете следовать описанному ниже методу, некоторые люди подумают, что вы на пути к безумию.С другой стороны, сумасшедшие люди могут думать, что вы гений.Все согласятся, что вы не должны делать это в вещах, которые они используют.

Конец предупреждений.

Если сценарий называется .Rprofile, он будет получен.Если вы создаете файл .Rprofile (или переменную окружения), который читает commandArgs(), вы можете настроить его для анализа командной строки.

Вы получите ошибки / проигнорируете всплывающие окна из R.плохая вещь была сделана.

Для чего это стоит, это может быть в списке дел для Rstudio: http://support.rstudio.org/help/discussions/problems/823-pass-command-line-parameters-to-r

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...