【问题标题】:R Shiny selectizeInput to matrix for stars plotR Shiny selectizeInput 到矩阵的星星图
【发布时间】:2015-11-01 19:03:17
【问题描述】:

在我的应用程序中,用户可以上传任何 .csv 文件并绘制它(我使用在线文件简化了示例,但我意识到示例图毫无用处)。我目前无法根据用户输入绘制星星符号。

我想使用 selectizeInput 以便他们可以选择任意数量的列来绘制光线的长度。星星需要采用列矩阵,但我认为 selectize 作为列表返回。

我在下面的代码中使用的方法显示了我想要的,但它只需要这么多列。我认为有一种简单的方法可以做到这一点,但我对 R 很陌生,搜索时找不到任何有效的方法。

ui.R

shinyUI(pageWithSidebar(
  headerPanel("Scatterplot of star symbols"),
  sidebarPanel(
    selectizeInput("starSpokes", "Select colums for star spoke lengths", c("murder", "Forcible_rate", "Robbery", "aggravated_assult", "burglary"), multiple = TRUE)
  ),
  mainPanel(
    plotOutput("graphPlot")
  )
))

服务器.R

shinyServer(function(input, output, session) {
  crime = read.csv("http://datasets.flowingdata.com/crimeRatesByState2005.tsv", header = TRUE, sep ="\t") 

  output$graphPlot = renderPlot({
    starRays = cbind(crime[[input$starSpokes[1]]], crime[[input$starSpokes[2]]], crime[[input$starSpokes[3]]], crime[[input$starSpokes[4]]])
    symbols(x=crime$murder, y=crime$burglary, stars = starRays)
  })
})

如果这个问题已经得到解答,我深表歉意,我已经搜索但没有找到任何有效的方法,可能是因为我不知道要搜索的正确术语或错误地实施了他们的方法。

任何帮助将不胜感激,谢谢

【问题讨论】:

    标签: r shiny selectize.js


    【解决方案1】:

    selectizeInput 的值只是一个字符向量,因此您可以使用它来选择crime 数据框的列。之后你只需要as.matrix。

    output$graphPlot <- renderPlot({
        if(length(input$starSpokes) < 3) return()
        symbols(
            x=crime$murder, y=crime$burglary,
            stars=as.matrix(crime[, input$starSpokes])
        )
    })
    

    当您使用 Shiny 时,最好检查输入和短路(如果它不符合标准)。由于stars 至少需要三列,因此如果用户没有选择所需的字段数,则没有理由评估其余代码。

    【讨论】:

    • 非常感谢。有没有办法找出从输入返回的数据类型?我不确定返回了什么,所以不确定要搜索什么,我不相信 shiny.rstudio 页面上有任何关于向量的内容。
    • 直截了当的方法是将class打印到日志或控制台。
    猜你喜欢
    • 1970-01-01
    • 2020-08-15
    • 2018-11-08
    • 2017-12-29
    • 1970-01-01
    • 1970-01-01
    • 2015-05-19
    • 1970-01-01
    • 2018-09-01
    相关资源
    最近更新 更多