Локальное задание RStudio: «исходные» несколько сценариев с использованием «sapply» ничего не вернут

#r #rstudio #local #sapply

#r #rstudio #Местные новости #sapply

Вопрос:

У меня есть три скрипта в одном каталоге: main.R, func1.R, func2.R. Коды

главный.R:

 rm(list = ls())
x <- 0
filelist <- c("func2.R", "func1.R")
print(ls())
sapply(filelist, source)
print(ls())
  

func1.R:

 x1 <- 1
  

функция 2.R:

 x2 <- 2
  

Если я запущу main.R в RStudio выходные данные будут

 [1] "filelist" "x"       
[1] "filelist" "x"        "x1"       "x2"  
  

Это означает, что результаты func1.R и func2.R экспортируются в глобальную среду. Однако, если я отправлю main.R как локальное задание в RStudio, результат будет

 [1] "filelist" "x"       
[1] "filelist" "x"      
  

Я знаю, что могу решить эту проблему, используя цикл для source каждого скрипта отдельно. Мне просто любопытно, почему sapply функция ведет себя по-разному в консоли и локальном задании, и как заставить ее работать, если я настаиваю на использовании sapply source всех сценариев вместе? Спасибо.

Ответ №1:

Я думаю, что существует недопонимание того, что подразумевается под локальным заданием. Функция run local job — это совершенно новая функция от RStudio, которая позволяет пользователю запускать задание и запускать его где-то локально, чтобы оно не зависело от собственного сеанса пользователя. Основная идея здесь заключается в том, что если у вас есть какая-то сложная с точки зрения вычислений работа, вы запускаете ее на какой-то другой машине, а затем собираете результаты, когда они выполнены. Если вы хотите, чтобы сценарии запускались в вашем собственном сеансе, вы должны использовать классическую source команду

Комментарии:

1. Спасибо за ваш ответ, но я все еще немного в замешательстве. Вы имеете source в виду, что функция не может быть использована в скрипте, представленном в локальном задании? У меня есть основной скрипт, и время выполнения основного скрипта составляет более 24 часов, поэтому я попытался использовать локальное задание. Однако все функции, используемые в основном скрипте, определены в нескольких других R-скриптах, поэтому мне нужно использовать source function в основном скрипте. Разве я не могу использовать локальное задание, если не помещу весь код в один файл сценария? Спасибо.