我有設計嵌套輸入/輸出應用程序的問題。 (我自己也嘗試對這個問題發佈到shiny-discuss然而,這將發帖時被自動刪除,爲什麼?)R Shiny嵌套uiOutput錯誤:輸入=> uiOutput => uiOutput =>輸出
我的應用程序可以簡化爲以下步驟:
通過輸入數據集textarea的。即:輸入$ textarea.in
加載數據集並顯示導入數據集的名稱列表。用戶可以通過selectInput選擇數據。即:uiOutput(「choosedata」)
計算所選數據的範圍,然後顯示sliderInput。即:uiOutput(「範圍」)
最後,計算sliderInput所選值的平方。 i.e.:verbatimTextOutput("range.out「)
那就是:改變進口數據集後,在第4步會發生
input => uiOutput => uiOutput => output
(work!) (work!) (error!)
錯誤。 更具體地,初始輸入格式是:
Data.A 1 2 3 4 5
Data.B 6 7 8 9 10 11
另一輸入格式是:
Data.C 1 3 5 7
Data.D 2 4 6 8
步驟2和3會自動地改變,但在步驟4的習慣。 如何解決它?
最佳
注意,在線應用程序和代碼如下:
http://glimmer.rstudio.com/tchsieh/myapp/
#=========================
#ui.R
#=========================
library(shiny)
shinyUI(pageWithSidebar(
headerPanel("Title"),
sidebarPanel(
p("Text Area:"),
tags$textarea(id="textarea.in", rows=3, "Data.A 1 2 3 4 5 \nData.B 6 7 8 9 10 11"),
uiOutput("choosedata"),
uiOutput("range")
),
mainPanel(
h2("Test"),
h3("Raw Data (step1: work!)"),
verbatimTextOutput("textarea.out"),
h3("Range of the selected data (step2: work!)"),
verbatimTextOutput("summary"),
h3("Squared of the selected value (step3:error when change Text area)"),
verbatimTextOutput("range.out")
)
))
#=========================
#server.R
#=========================
library(shiny)
shinyServer(function(input, output) {
loadPaste <- reactive({
text <- input$textarea.in
temp <- lapply(readLines(textConnection(text)), function(x) scan(text = x, what='char'))
out <- list()
out.name <- 0
for(i in seq_along(temp)){
out.name[i] <- temp[[i]][1]
out[[i]] <- as.numeric(temp[[i]][-1])
}
names(out) <- t(data.frame(out.name))
out
})
output$textarea.out <- renderPrint({
loadPaste()
})
output$choosedata <- renderUI({
dataname <- names(loadPaste())
dataList <- list()
for(i in seq_along(dataname)){
dataList[[i]] <- dataname[i]
}
selectInput("dataset", "Select dataset:", choices = dataList, selected = dataList[1])
})
output$summary <- renderPrint({
out <- loadPaste()
id <- which(names(out) == input$dataset)
mydata <- out[[id]]
range(mydata)
})
output$range <- renderUI({
out <- loadPaste()
id <- which(names(out) == input$dataset)
mydata <- out[[id]]
sliderInput("range.in", "Selecte a value in the range of data", min=min(mydata), value=mean(mydata), max=max(mydata), step=diff(range(mydata))/10)
})
output$range.out <- renderPrint({
(input$range.in)^2
})
})
該問題已通過在輸出$ choosedata中使用「tryCatch()」並輸出$ range來解決。 – user2179862 2013-03-17 19:48:37
然後,您應該添加該答案作爲答案,以便人們可以更輕鬆地找到答案。 – 2013-03-19 19:31:43