Адресация OpenCPU графики из JavaScript после ocpu.вызов

У меня есть вебприложение OpenCPU, которое (с точки зрения пользователя) одновременно предоставляет как табличное, так и графическое представление прогнозов на основе моделей.

Прогнозы управляются входными данными, предоставленными пользователем (предиктор/независимые переменные), взятыми из таблицы html. Вычисления затем выполняются в пределах R, и результирующие данные (ответ/зависимые переменные плюс связанная статистика) используются как для обновления таблицы html, так и для подачи сопутствующей графики.

Мое текущее решение заключается в следующем:

ocpu.rpc принимает пользовательский ввод, выполняет вычисления и передает обратно обновления таблицы, которые применяются через JavaScript. Как только они были применены, то…

ocpu.rplot занимается (в составе окпу.функция обратного вызова rpc) для создания соответствующего графика. (Обратите внимание, он должен учитывать обновления – следовательно, обратный вызов).

В то время как вышеуказанное решение работает, я не могу помочь, но чувствую, что есть более элегантное решение…

Из соображений эффективности я хотел бы обработать входную таблицу и произвести все табличные/графические выходные данные в сингулярном вызове функции R. Это я могу с радостью сделать, но моя проблема возникает, когда я пытаюсь получить доступ к обоим наборам выходных данных через JavaScript. Specificall:

  1. Я изо всех сил, чтобы увидеть, как я могу получить используемый графический ocpu.rpc.
  2. Я изо всех сил пытаюсь увидеть, как я могу получить данные таблицы, использованные ocpu.rplot.
  3. ocpu.call кажется, путь вперед, как я могу видеть оба элемента, а именно ocpu/tmp/key/R/.val and ocpu/tmp/key/graphics / 1 … Я могу получить обновления таблицы, проведенные в прежнем с помощью вспомогательной функции getObject (), но, несмотря на мои усилия, у меня возникли проблемы с графикой.

Любая помощь / совет были бы очень признательны!

1 ответ

  1. Я думал, что я бы разместить свой собственный ответ, как это может помочь другим… Входные данные, передаваемые в сингулярную функцию R через ocpu.вызов. Обновления таблиц, возвращаемые и применяемые с помощью JavaScript, в то время как сопровождающая графика (основанная на тех же вычислениях) хранится на сервере. Графический затем применяется к экрану, как показано ниже. (Код имитирует ocpu.графическая обработка rplot).

    <div id="outputAreaGraphics"></div>     
    
    <style>
        #outputAreaGraphics {
            background: white;
            background-position: center center;
            background-repeat: no-repeat;   
            background-size: 100% 100%;     
            height: 600px;
            position: relative;
            width: 100%;
        }
    </style>
    
    <script>
        var graphics    = $("#outputAreaGraphics");     
        var pngHeight   = graphics.height();
        var pngWidth    = graphics.width();
        var graphicsURL = session1.getLoc() + "graphics/last/";
    
        var spinner = $("<span />")
            .appendTo(graphics)
            .attr({style : "font-family: monospace; left: 20px; position: absolute; top: 20px; z-index: 1000; "})
            .text("loading...");
    
        graphics.css("background-image", "url(" + graphicsURL + "png?width=" +
            pngWidth + "&height=" + pngHeight + ")");
    
        spinner.hide();
    
        var pdf = $("<a />")
            .appendTo(graphics)
            .attr({href: graphicsURL + "pdf?width=11.69&height=8.27&paper=a4r", style: "font-family: monospace; position: absolute; right: 10px; text-decoration: underline; top: 10px; z-index: 1000;", target: "_blank"})
            .text("pdf");
    
        var png = $("<a />")
            .appendTo(graphics)
            .attr({href: graphicsURL + "png?width=800&height=600", style: "font-family: monospace; position: absolute; right: 10px; text-decoration: underline; top: 50px; z-index: 1000;", target: "_blank",})
            .text("png");
    
        var svg = $("<a />")            
            .appendTo(graphics)
            .attr({href: graphicsURL + "svg?width=11.69&height=8.27", style: "font-family: monospace; position: absolute; right: 10px; text-decoration: underline; top: 30px; z-index: 1000;", target: "_blank"})
            .text("svg");
    </script>