在我的应用程序中,用户可以上传任何.csv文件并将其绘制为(我通过使用在线文件简化了示例,我意识到示例图非常无用)。我目前无法从用户输入中绘制星星符号。
我想使用selectizeInput,因此他们可以选择任意数量的列作为光线的长度。星星需要采用列的矩阵,但我认为选择返回列表。
我在下面的代码中使用的方法显示了我想要的内容,但它只需要很多列。我假设有一种简单的方法可以做到这一点,但我对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")
)
))
server.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)
})
})
我很抱歉,如果已经回答了这个问题,我已经搜索过但发现没有任何效果,可能是因为我不知道正确的搜索条件或者他们的方法执行错误。
非常感谢任何帮助,谢谢
答案 0 :(得分: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
至少需要三列,因此如果用户没有选择所需的字段数,则没有理由评估其余代码。