提前谢谢大家。我正在尝试缩小范围,但我是闪亮的新手,所以我无法缩小范围。我的主要困惑是反应式与其他类型的反应式(?)结构。
我想要做的是列出 R 基本数据包。我有一个选择框。这样可行。选择后,R 将显示该数据集的字段,以便用户可以接受 Y 和 X 值。(我意识到有些集合没有为此格式化。)下面列出的代码在主面板中给出了“不正确的维度数”。错误似乎是在调用名称的某个地方。我似乎不明白如何在他们有创意后将反应性元素放入用户界面。关于这个的任何提示?
同样,数据集列表有效。数据表被正确拉取。但是名称不存在,因此可以选择它们来构建情节。
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)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句