Передача локальных данных из одного скрипта в другой - PullRequest
0 голосов
/ 03 июля 2018

Немного предыстории, чтобы вы могли понять проблему / окружающую среду:

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

Это то, что я хотел бы сделать: я хочу, чтобы приложение и эта функция были в отдельных скриптах, так как одна функция содержит более 300 строк кода. В настоящее время они находятся в отдельных сценариях, однако они еще не связаны друг с другом.

Структура моего server в блестящем это:

output$plot <- renderPlot({
  # Filter based on UI to result in a data set called d2
  # Here I would like to call my function

Структура моей функции:

data <- fread("local_path.csv") 

my_function <- function(){
  # A ton of calculations using data set loaded above
}
# Call to function
my_function()

Прямо сейчас, если я зайду в свой server и вызову source("my_function_script.R"), скрипт будет работать с данными, которые я загружаю в этом скрипте.

У меня вопрос, как мне отправить данные в другой скрипт? Я могу легко запустить исходную строку и затем вызвать функцию в блестящем приложении, но как я могу отправить отфильтрованные данные другому сценарию?

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

Я знаю, что одним из решений (хотя и не очень хорошим) будет вывод csv после фильтрации данных, а затем установка этого пути к файлу в моем другом сценарии, так как это огромный кусок данных (даже с фильтрацией) это сильно замедлит процесс.

Любые мысли и помощь приветствуются! Спасибо!

1 Ответ

0 голосов
/ 03 июля 2018

Если я правильно понимаю, когда вы говорите «как отправить данные другому сценарию», вы подразумеваете под «другим» сценарий, который определяет функцию - тот, который в настоящее время начинается с data <- fread(...).

Ответ таков: вы не отправляете данные из server.R в этот скрипт; и не вызывайте функцию из этого скрипта, просто определите ее там. Вы должны:

  • удалить вызов функции my_function() из скрипта, который определяет функцию
  • добавить аргумент d2 к функции
  • вверху вашего server.R (то есть до shinyServer(function(input, output)), вызовите source(my_function_definition.R), чтобы исходный полный набор данных считывался один раз, а функция была определена один раз
  • определить d2 как реактивный объект в server.R (я полагаю, вы уже делаете это) d2 <- reactive({definition code here; return(d2)})
  • вызывайте my_function(d2()), когда вам нужно в файле server.R, передавая результат тому, что нуждается в этих результатах для получения некоторого результата.

Функции должны принимать входы и возвращать выходы.

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