我有一个来自here的xls文件。首先,如何降低服务器端代码的复杂性?如何一次获取数据? (猜测是被动的,但如何?)其次,用户将从类别中进行选择,但是如何在plot_ly()中使用*子集*数据?我的代码如下。有人可以帮我检查吗?谢谢。
library(shiny)
library(readxl)
library(plotly)
ui = fluidPage(
titlePanel("File Input Test"),
sidebarLayout(
sidebarPanel(
fileInput("Xfile", "Choose xls file:",
accept = c(".xls")
),
uiOutput("here")
),
mainPanel(
plotlyOutput("plot"))
)
)
server = function(input, output){
output$here <- renderUI({
UserFile <- input$Xfile
if(is.null(UserFile))
return(NULL)
file.rename(UserFile$datapath, paste(UserFile$datapath, ".xls", sep=""))
test <- read_excel(paste(UserFile$datapath, ".xls", sep=""), 1)
selectInput(inputId = "xyz", label = "Choose one:", choices = unique(test[[5]]))
})
output$plot <- renderPlotly({
UserFile <- input$Xfile
if(is.null(UserFile))
return(NULL)
file.rename(UserFile$datapath, paste(UserFile$datapath, ".xls", sep=""))
test <- read_excel(paste(UserFile$datapath, ".xls", sep=""), 1)
plot_ly(subset(Iris, Iris[[5]] %in% input$xyz), x=~test[[1]], y=~test[[2]])
})
}
shinyApp(ui,server)
答案 0 :(得分:0)
关于第一个问题。确实,反应性可以解决问题
+
可以类似地进行绘制。
(对于子集数据,您必须详细说明您的意思。)
以下代码可能会解决您的子集问题 output $ plot <-renderPlotly({ 测试<-dat() if(is.null(test)) 返回(NULL)
dat<-reactive({
UserFile <- input$Xfile
if(is.null(UserFile))
return(NULL)
file.rename(UserFile$datapath, paste(UserFile$datapath, ".xls", sep=""))
test <- read_excel(paste(UserFile$datapath, ".xls", sep=""), 1)
})
output$here <- renderUI({
test <- dat()
if(is.null(test))
return(NULL)
selectInput(inputId = "xyz", label = "Choose one:", choices = unique(test[[5]]))
})