2013-12-09 1 views
1

Я работаю над блестящим приложением с 2 таблицами, 1 графиком и условным ответом.Добавить строки непосредственно в r блестящие приложения

Я хочу добавить строку в таблицу непосредственно в Shiny и обновить результаты.

Например, в таблице с идентификатором, двумя датами и 2 вариантами выбора вопросов. У меня есть 3 наблюдения, и я хочу, чтобы пользователь мог добавлять n others наблюдения, что должно привести к тому, что другие таблицы и графики будут обновлены с помощью этих новых наблюдений.

Возможно ли это? Если да, как вы это делаете?

Спасибо, простите мой плохой английский.

Вот ссылка моих блестящих приложений http://www.hostingpics.net/viewer.php?id=459723Shiny.png

и вот код, который работает:

https://gist.github.com/wolf6541/7874968

я уже попробовать это на мой вопрос:

**Ui.r** 
#Titre 
    h3("Ajout d'un nouveau patient"), 

#Date inclusion 
dateInput("date_inclu", "Date de l'inclusion", value = ,language = "fr"), 

#Date reponse 
dateInput("date_rep", "Date de reponse", value = ,language = "fr"), 

#Dose 
textInput("dose", "Dose administree",), 

#Reponse 
textInput("tox", "Reponse toxicite",), 

updateData() 


**Server.R** 
    identifiant =length(data_time$identifiant) 
    dose =reactive(input$dose) 
    date_inclusion =reactive(input$date_inclu) 
    date_reponse =reactive(input$date_rep) 
    reponse =reactive(input$tox) 

    nouveau_pat = cbind(identifiant, dose, date_inclusion, date_reponse, reponse) 
    nouveau_pat = as.data.frame(nouveau_pat) 

    data_time = rbind(data_time,nouveau_pat) 

но это не работает

+0

Добавить, что вы пробовали до сих пор.Сообщество Stackoverflow сможет помочь вам, если они смогут посмотреть вашу попытку. – Yogesh

+0

Спасибо за вашу помощь, я просто обновляю свой пост – user3083101

ответ

0

Наконец я нашел способ сделать это,

server.R

#Stockage des donnes 
    makeData <- observe({ 
    Data 
    write.table(t(c(input$Identifiant, 
        as.character(input$datei), 
        input$dose, 
        as.character(input$dater), 
        input$reponse)),file="donnees",sep="\t",col.names=F,row.names=F,append=T) 
    }) 

    #affichage table pat 
    output$table_pat <- renderTable({ 
    table_pat = data.frame(Identifiant = input$Identifiant, 
          Date_inclusion =as.character(input$datei), 
          Dose = input$dose, 
          Date_reponse =as.character(input$dater), 
          Reponse = input$reponse) 
    },include.rownames=FALSE) 

ui.r

shinyUI(pageWithSidebar(
    headerPanel("OPTIMUM TRIAL"), 

    sidebarPanel(

    h3("Ajout d'un nouveau patient"), 
    #Identifiant 
    textInput("Identifiant","Identifiant du patient:",value =""), 

    #Dose 
    selectInput("dose", "Dose:", 
       c(1,2,3,4,5,6), selected = 1), 
    #Toxicite 
    selectInput("reponse", "Reponse:", 
       c("Succes","Echec"), selected = "Succes"), 

    #Date inclusion 
    dateInput("datei", "Date de l'inclusion:", format = "yyyy-mm-dd",value =Sys.Date(),language = "fr"), 

    #Date reponse 
    dateInput("dater", "Date de reponse:", format = "yyyy-mm-dd",value =Sys.Date(),language = "fr"), 

    submitButton("Ajouter le patient"), 

    h3("Supprimer un patient"), 

    textInput("Supprimer","Identifiant du patient a supprimer:", value = ""), 

    submitButton("Supprimez le patient") 

), 

    mainPanel(

    h3("Nouveau patient"), 
    tableOutput("table_pat"), 

    h3("Historique des patients"), 
    tableOutput("Data"), 

Входные данные от записи в текстовом файле и с read.table в в начале вашего кода вы можете обновить таблицу. Однако вам необходимо перезапустить приложение. Существует, вероятно, лучший способ, который позволяет обновлять без перезапуска приложения, но я не нашел его

Вы можете использовать следующую функцию, чтобы избежать в первом чтении по умолчанию данных (найти в другой вопрос в StackOverflow (Delayed execution in R Shiny app)

#Fonction pour ne pas imprimer lors du lancement de la page 
    values <- reactiveValues(starting = TRUE) 
    session$onFlushed(function() { 
    values$starting <- FALSE 
    }) 

    #Stockage des donnees 
    makeData <- observe({ 
    if (values$starting){ 
     return(NULL)} 

    else { 
     write.table(.... 

    }) 
1

Один из способов сделать это, чтобы полагаться на matrixInput функции shinyIncubator пакета. пакет shinyIncubator имеет особенности развития, которые иногда в конце концов слились с shiny. Учитывая его amazingness, я ожидаю, что matrixInput или что-то, как это будет быть частью базы shiny в течение нашей жизни.

Я сделал демо:

library("shiny") 
library("shinyIncubator") 
runGist("https://gist.github.com/anonymous/8449201") 

Для меня сложнее всего было matrixInput, чтобы показать свою colnames, которые скрыты по умолчанию. Что вам нужно сделать, это настроить стиль отображения. Вы можете сделать это в css или, как я, в теле вашего ui.R, используя теги. Ключ должен назначить display: table-header-group на номер .tableinput .hide. Другие функции отображения можно найти, используя опцию inspect element вашего браузера: Firefox и Chrome имеют эту функцию; другие браузеры, вероятно, тоже.

tags$head(
    tags$style(type = "text/css" 
    , ".tableinput .hide {display: table-header-group;}" 
) 
)