2013-11-19 3 views
8

Я пытаюсь включить блестящую реализацию в пакет, который я делаю. Я вижу, что в shiny::runApp() можно указать интерфейс и сервер в виде списка, а не расположение каталога:Код HTML UI Блестящее приложение в пакете

runApp(list(
    ui = bootstrapPage(
    numericInput('n', 'Number of obs', 100), 
    plotOutput('plot') 
), 
    server = function(input, output) { 
    output$plot <- renderPlot({ hist(runif(input$n)) }) 
    } 
)) 

Как вы это делаете при использовании пользовательских HTML UI? И где должны быть размещены соответствующие файлы в каталоге пакета? Компоновка блестящего приложения будет выглядеть примерно так:

server.R 
www/ 
    style.css 
    scripts.js 

Я думаю, что решение может включать в себя includeHTML(), includeCSS() и т.д., но я не могу понять, что документация говорит.

+0

Вы хотите, чтобы использовать runApp в приведенном выше списке() с помощью HTML-файла для ui? Не можете ли вы просто сделать index.html в папке www, а затем просто запуститьApp (ваша папка)? – xiaodai

ответ

17

иерархии пакета Вы должны выглядеть следующим образом:

R 
    launcher.R 
man 
inst 
    myshinyapp 
     server.R 
     www 
      index.html  ## here your ui interface 
      shared 
       js 
        yourscript.js 
       css 
        style.css 

в launcher.R следует добавить эту функцию:

runUI <- function() 
    shiny::runApp(
     system.file('myshinyapp',              
     package='my_package_name')) ## your package name here 

Вы должны экспортировать/импортировать в пространстве имен:

export(runUI) 
import(shiny) 

и в DESCRIPTI ON разделы импорта:

Imports:shiny 
1

Поместите свой index.html, содержащий ваш HTML, в папку www. В данный момент Убрать ui.R если он существует. Теперь просто

runApp(yourFolder) 

где yourFolder должен быть путь к вашему серверу. Если ваш index.html настроен правильно, тогда должно появиться приложение Shiny.

+0

Спасибо за ответ. Это не то, что я ищу. Я знаю, что вы можете использовать 'runApp()' для указания местоположения папки, но я хочу указать сервер и интерфейс в формате списка, подобном моему примеру выше. Это связано с тем, что я внедряю блестящее приложение в пакет. Я бы предпочел не путаться с путями на компьютере пользователя. На данный момент похоже, что мне, вероятно, придется использовать 'runApp()' и указывать на '.Library пользователя'. Не худшее решение, но было бы лучше сделать это, как вы можете, в формате UI.r. – MadScone

2

Ну, вы можете достичь этого, поместив весь свой HTML в функцию HTML(). Убедитесь, что вы передали действительный HTML-код для Shiny, тогда вам все будет в порядке!

runApp(list(
    ui = bootstrapPage(
    HTML("<h1>Hello World</h1>") 
), 
    server = function(input, output) { 
    output$plot <- renderPlot({ hist(runif(input$n)) }) 
    } 
)) 
Смежные вопросы