R编程闪亮的反应基础知识 - 数据类型



请提前感谢。我正在尝试将其缩小,但是我是Shinny的新手,所以我很难将其缩小。我的主要混乱是反应性与其他类型的反应性(?)结构。

我要做的是列出R基本数据软件包。我在一个选择的盒子里有那个。这样可行。选择该数据后,R将显示该数据集的字段,以便用户可以接受Y和X值。(我意识到有些集合并没有为此格式。)下面列出的代码给出了主面板中的"尺寸不正确"。错误似乎在调用名称的某个地方。我似乎不明白如何在创造性之后将反应性元素进入UI。有什么提示吗?

再次,数据集列表起作用。数据表已正确拉出。但是名称不存在,因此可以选择它们来构建图。

library(shiny)
set.seed(10101)
dataPkgs <- data(package='datasets')[[3]]
pkgNames <- dataPkgs[,3]
ui <- fluidPage(
  headerPanel('R Data k-means clustering'),
  sidebarPanel(
    selectInput('choosedata', 'Choose a Data Set',pkgNames,selected="mtcars"),
    helpText("Listing should make available all basic datasets available in base R install.
             Remember many of the data sets will be ill-fit for this type of analysis."),
    selectInput('ycol', 'Select Independent Y', textOutput('selDFNames')),
    selectInput('xcol', 'Select Dependent X', textOutput('selDFNames')),
    numericInput('clusters', '1-7 clusters', 3,
                 min = 1, max = 7)
  ),
  mainPanel(
    plotOutput('plot1')
  )
)

server <- function(input, output, session) {
  selDF <- renderTable({
    get(input$choosedata)
  })
  output$selDFNames <- renderText({
    names(selDF())
  })
  selDFset <- reactive({
    selDF()[, c(input$xcol, input$ycol)]
  })
  clusters <- reactive({
    kmeans(selDFset(), input$clusters)
  })
  output$plot1 <- renderPlot({
    plot(selDFset(),
         col = clusters()$cluster,
         pch = 20, cex = 3)
    points(clusters()$centers, pch = 4, cex = 4, lwd = 4)
  })
}
shinyApp(ui = ui, server = server)

我会添加更多的测试用例,并抓住我的答案,但是如果您获得知道工作的数据集,而不仅仅是要求所有数据集:

library(shiny)
set.seed(10101)
dataPkgs <- data(package='datasets')[[3]]
pkgNames <- dataPkgs[,3]
longley[,c("GNP.deflator","GNP.deflator")]
ui <- fluidPage(
  headerPanel('R Data k-means clustering'),
  sidebarPanel(
    selectInput('choosedata', 'Choose a Data Set',pkgNames,selected="mtcars"),
    helpText("Listing should make available all basic datasets available in base R install.
             Remember many of the data sets will be ill-fit for this type of analysis."),
    selectInput('ycol', 'Select Independent Y', choices = NULL),
    selectInput('xcol', 'Select Dependent X', choices = NULL),
    numericInput('clusters', '1-7 clusters', 3,min = 1, max = 7)
    ),
  mainPanel(
    plotOutput('plot1')
  )
)
server <- function(input, output, session) {
  selDF <- reactive({
    data <- tryCatch(get(input$choosedata), error=function(e) NULL)
    if(is.null(data)){
      return()
    }
    data
  })
  observeEvent(selDF(),{
    updateSelectInput(session,"xcol",choices=c(names(selDF())))
    updateSelectInput(session,"ycol",choices=c(names(selDF())))
  })
  selDFset <- eventReactive(c(input$xcol, input$ycol),{
    req(input$xcol)
    req(input$ycol)
    selDF()[,c(input$xcol, input$ycol)]
  })
  clusters <- reactive({
    kmeans(selDFset(), input$clusters)
  })
  output$plot1 <- renderPlot({
    req(selDFset())
    plot(selDFset(),col = clusters()$cluster,pch = 20, cex = 3)
    points(clusters()$centers, pch = 4, cex = 4, lwd = 4)
  })
}
shinyApp(ui = ui, server = server)

使用observeupdateSelectInput更新您的选择输入。这是服务器功能,效果很好。祝你好运。

server <- function(input, output, session) {
  selDF <- reactive({
    get(input$choosedata, envir = as.environment('package:datasets'))
  })
  observe({
    updateSelectInput(session, "ycol", choices = names(selDF()))
  })
  observe({
    updateSelectInput(session, "xcol", choices = names(selDF()))
  })
  selDFset <- reactive({
    selDF()[, c(input$xcol, input$ycol)]
  })
  clusters <- reactive({
    kmeans(selDFset(), input$clusters)
  })
  output$plot1 <- renderPlot({
  plot(selDFset(),
     col = clusters()$cluster,
     pch = 20, cex = 3)
 points(clusters()$centers, pch = 4, cex = 4, lwd = 4)
  })
}
shinyApp(ui = ui, server = server)

最新更新