R 在shiny中,如何将筛选器链接到部分数据以更改某些图表而不是其他图表?
我试图将桑坦德产品推荐公司的数据可视化。我想用不同的过滤器显示变量的分布,以确定哪里可能有可能指示变化的变量。我是个新手。 当我事先定义了过滤器,并且没有将仪表板链接到这些过滤器时,我可以让应用程序工作。一旦我尝试链接它,我就会得到一个错误 警告:类型为“closure”的[:对象中的错误不可子集 我已经查过了,在附加代码中没有看到我引用了R认为是函数的东西R 在shiny中,如何将筛选器链接到部分数据以更改某些图表而不是其他图表?,r,filter,shiny,R,Filter,Shiny,我试图将桑坦德产品推荐公司的数据可视化。我想用不同的过滤器显示变量的分布,以确定哪里可能有可能指示变化的变量。我是个新手。 当我事先定义了过滤器,并且没有将仪表板链接到这些过滤器时,我可以让应用程序工作。一旦我尝试链接它,我就会得到一个错误 警告:类型为“closure”的[:对象中的错误不可子集 我已经查过了,在附加代码中没有看到我引用了R认为是函数的东西 shinyServer( function(input, output) { #this is the part
shinyServer(
function(input, output) {
#this is the part that cause the failure
df2<-reactive({
df2<-df %>% filter(Changed %in% input$Changed)
# if(input$Changed=="All")
# return()
# df
})
observe(print(df2()))
output$newHist <- renderPlot({
hist(df[,var3[1]], xlab=var3[1],
col='lightblue',main='Histogram') })
output$newHist3 <- renderPlot({
hist(df2()[,var3[1]], xlab=var3[1],
col='blue',main='Histogram') })
output$newHist2 <- renderPlot({
hist(df[,var3[2]], xlab=var3[2],
col='red',main='Histogram')})
output$newHist4 <- renderPlot({
hist(df2()[,var3[2]], xlab=var3[2],
col='purple',main='Histogram')
})
}
)
失败的地方是我试图定义要筛选的第二个数据集
df2<-reactive({df2<-df %>% filter(Changed %>% input$Changed)})
我已经查看了错误消息,但在R中没有看到任何名为Changed或df2的消息
我提升以允许选择中的所有元素。但是我已经删除了这个元素,我仍然存在这个问题
library(shiny)
#df<-trainchange
df<-data.frame(age=c(56, 63, 62, 62, 60, 49, 50, 62, 60, 57)
,
Num_Changes= c(0, 0, 0, 0, 0, 0, 0, 0, 1, 1),
Changed=c(0, 0, 0, 0, 0, 0, 0, 0, 1, 1))
#rng<- c("All",unique(df$Changed))
rng<- c(unique(df$Changed))
shinyUI(pageWithSidebar(
headerPanel("Data science FTW!"),
sidebarPanel(
h3('Sidebar text'),
selectInput('Changed', 'Have New Products Been Bought',
choices=rng, selected= rng[1])
),
mainPanel(
h3('Main Panel text'),
fluidRow(
splitLayout(cellWidths = c("50%", "50%"),
plotOutput("newHist"), plotOutput("newHist3"))
),
fluidRow(
splitLayout(cellWidths = c("50%", "50%"),
plotOutput("newHist2"), plotOutput("newHist4"))
)
)
))
library(shiny)
library(tidyverse)
library(dplyr)
df<-data.frame(age=c(56, 63, 62, 62, 60, 49, 50, 62, 60, 57)
,
Num_Changes= c(0, 0, 0, 0, 0, 0, 0, 0, 1, 1),
Changed=c(0, 0, 0, 0, 0, 0, 0, 0, 1, 1))
# df<-trainchange
#it works when I define this and block the element of code that
#is not working, but then its just static charts
#df2<-df[df$Num_Changes!=0,]
#list will grow
var3<-c("age","Num_Changes")
shinyServer(
function(input, output) {
#this is the part that cause the failure
df2<-reactive({
df2<-df %>% filter(Changed %>% input$Changed)
# if(input$Changed=="All")
# return()
# df
})
output$newHist <- renderPlot({
hist(df[,var3[1]], xlab=var1,
col='lightblue',main='Histogram') })
output$newHist3 <- renderPlot({
hist(df2[,var3[1]], xlab=var3[1],
col='blue',main='Histogram') })
output$newHist2 <- renderPlot({
hist(df[,var3[2]], xlab=var3[2],
col='red',main='Histogram')})
output$newHist4 <- renderPlot({
hist(df2[,var3[2]], xlab=var3[2],
col='purple',main='Histogram')
})
}
)
我无法上传图像,但它应该有两个相同变量的直方图,相邻,右边的一个有一个由侧边栏确定的不同过滤器。一旦我开始工作,我将扩展到更多过滤器和更多图表。
谢谢你能给我的帮助。
J首先,您需要%in%而不是%>%在过滤器内部为filterChanged%%>%input$Changed。其次,被动是一个函数,因此任何被动对象都应该稍后使用df2调用,以便将df2变为df2。最后,我在第一个绘图中将xlab从var1更改为var3[1]
这是一个正常工作的服务器函数
shinyServer(
function(input, output) {
#this is the part that cause the failure
df2<-reactive({
df2<-df %>% filter(Changed %in% input$Changed)
# if(input$Changed=="All")
# return()
# df
})
observe(print(df2()))
output$newHist <- renderPlot({
hist(df[,var3[1]], xlab=var3[1],
col='lightblue',main='Histogram') })
output$newHist3 <- renderPlot({
hist(df2()[,var3[1]], xlab=var3[1],
col='blue',main='Histogram') })
output$newHist2 <- renderPlot({
hist(df[,var3[2]], xlab=var3[2],
col='red',main='Histogram')})
output$newHist4 <- renderPlot({
hist(df2()[,var3[2]], xlab=var3[2],
col='purple',main='Histogram')
})
}
)
编辑
感谢您的支持,以及对我的错误之处的解释。我现在正在努力使All元素正常工作。在我的UI中,我为更改的变量创建了一个范围rng,并将默认值更改为rng[2]所以它就运行了。我一选择全部,就会收到一条错误消息,说中断次数无效。我曾尝试在服务器函数中使用ifis.null语句,但随后我收到一个更大的错误,应用程序立即崩溃。感谢您的帮助。它帮助我解决了我的问题,为我的选择输入添加了multiple=TRUE。Th再次感谢您的帮助。@JamesOliver我很高兴能提供帮助。请参阅我的编辑,以了解在“All”情况下更有效的方法。