我正在尝试可视化桑坦德产品推荐组合中的数据。我想用不同的过滤器显示变量的分布,以识别可能存在指示变化的变量。我是RShiny的新手。
当我事先定义过滤器并且没有将仪表板链接到这些过滤器时,我就可以使该应用程序正常工作。尝试链接时,我会收到错误消息
“警告:[:类型为'closure'的对象的错误不可子集”
我已经看过了,在附加代码中没有看到我在引用R认为是函数的东西。
失败的区域是我尝试定义要过滤的第二个数据集的地方。
df2<-reactive({df2<-df %>% filter(Changed %>% input$Changed)})
我已经查看了this question的错误消息,但是在R中什么都没有看到名为“ Changed”或df2的内容。
我提起this piece of code以允许选择所有内容。.但是我删除了此元素,但仍然存在此问题。
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
答案 0 :(得分:1)
首先,您需要在%in%
中用%>%
代替filter
中的filter(Changed %>% input$Changed)
。其次,reactive
是一个函数,因此以后应使用reactive
来调用任何()
对象,以便df2
成为df2()
。最后,我在第一张图中将xlab从var1
更改为var3[1]
。
这是一个有效的server
函数。
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')
})
}
)
rng<- c("All",unique(df$Changed))
df2<-reactive({
#df2<-df %>% filter(Changed %in% input$Changed)
if(input$Changed=="All") df else df %>% filter(Changed %in% input$Changed)
})