我希望用户能够上传.csv并能够创建它的饼图。如果有一个列包含他们想要组合在一起的类别,他们应该能够。 下面的代码显示了我想要做的事情,但只有在编写程序时我知道列名(在本例中为Gender)时才有效。
piePlotData = aggregate(. ~ Gender, inFile, sum)
pie(piePlotData[[input$pieData]], labels = piePlotData[[input$pieGroups]])
如果可能,我想用input$pieGroups
以下是可以上传的数据的简单示例:
Gender Name Maths English
M Bob 4 2
M Fred 1 7
F Mary 5 4
我很抱歉,如果之前已经回答了这个问题,我已经尝试了其他人的解决方案,但是当上传的数据可以采用任何格式并保持相同的列名时,我无法让它们工作。
我更喜欢解决方案只使用基本R包,但任何解决方案都比没有解决方案更好:P 提前致谢
(Somewhat)简单的代码示例:
server.R:
library(shiny)
shinyServer(function(input, output, session) {
inFile = reactive({ return (read.csv(file.choose(), header = TRUE))})
observe({
updateSelectInput(session, "pieData", choices = names(inFile()))
updateSelectInput(session, "pieGroups", choices = names(inFile()))
})
output$plot = renderPlot({
piePlotData = aggregate(. ~ Gender, inFile, sum)
pie(piePlotData[[input$pieData]], labels = piePlotData[[input$pieGroups]])
})
})
ui.R:
shinyUI(pageWithSidebar(
headerPanel("Grouped Pie Chart"),
sidebarPanel(
selectInput("pieData", "Columns in pie", "Update"),
selectInput("pieGroups", "Groups for pie", "Update")
),
mainPanel(
plotOutput("plot")
)
))
答案 0 :(得分:1)
您可以使用formula
从字符串创建公式。
例如,您可以server.R
执行:
piePlotData = aggregate(formula(paste0(".~",input$pieGroups)), inFile(), sum)