Выполнение множества команд R по одной на работающем док-контейнере - PullRequest
1 голос
/ 24 сентября 2019

У меня есть работающий контейнер с изображением RStudio и мой собственный предустановленный пакет.Моя задача состоит в том, чтобы вызывать разные функции из пакета одну за другой - выход из одной функции является входом для других функций.Я не хочу делать это так: fun1(x) %>% fun2(x) %>% ... %>% funN(x).Я хочу, чтобы это работало так:

out1 <- fun1(x)
out2 <- fun2(out1)
...
funN(outN-1)

Причина, по которой я хотел бы сделать это, состоит в том, что я хотел бы вызывать эти функции как отдельные docker exec команды для работающего контейнера.Я планирую преобразовать эти команды в отдельные задания Jenkins.

Я попробовал docker exec ... команды, но потерпел неудачу на втором шаге.На первом этапе функция fun1 создает объект R out1.Но out1 недоступен для второго docker exec вызова, т. Е. Это не работает:

docker run --name=my_container -d my_image (ok)
docker exec -it my_container Rscript main.R (ok)
docker exec -it my_container R "-e my_package::fun2(out1)" (not ok - object out1 not found)

, где main.R примерно так:

library(my_package)
out1 <- my_package::fun1()

Вдругими словами, следующий docker exec является продолжением предыдущего - все объекты, живущие в рабочем пространстве R после завершения предыдущего шага, должны быть доступны для функций на следующем шаге.Является ли это возможным?Я хотел бы избежать помещения всех функций (шагов) в один R-скрипт.Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 24 сентября 2019

Вы можете попробовать это:

    docker run -it rocker/rstudio-stable:3.5.1 echo 'set.seed(123); 
    out1 <- base::sample(1:100, 3);
    print(out1);
    out2 <- out1 * 3;
    print(out2)'  | R --no-save 

Вывод:

> set.seed(123);
                 >     out1 <- base::sample(1:100, 3);
                                                      >     print(out1);
                                                                        [1] 29 79 41
                                                                                    >     out2 <- out1 * 3;
                                                                                                           >     print(out2)
                                                                                                                            [1]  87 237 123
                                                                                                                                           >
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...