如何在一个反应函数中传递两个输入以基于两者来区分数据
Posted
技术标签:
【中文标题】如何在一个反应函数中传递两个输入以基于两者来区分数据【英文标题】:how to pass two inputs in one reactive function to distinguish data on the basis of both 【发布时间】:2018-03-21 12:06:38 【问题描述】:biz1 = data.frame(
Stock = query11$MONTHNAME,
SaleDate=query11$SALE_DATE,
Total = as.numeric(as.character(query11$TOTAL)),
NumberOfBills=query11$TRIID,
year=query11$YEAR,
stringsAsFactors = FALSE
)
output$Box3 = renderUI(
if (USER$Logged==TRUE)
selectInput("yr","select a year",c(unique(biz1$year),"pick one"),"pick one")
)
output$Box4= renderUI(
if (USER$Logged==TRUE)
if (is.null(input$yr) || input$yr == "pick one")return()
else selectInput("sector",
"Select a Month",
c(unique(biz1$Stock[which(biz1$year%in%input$yr)]),"pick one"),
"pick one")
)
这里的 subdata2 是反应函数,我想根据两个输入来区分数据,但我不能以正确的格式传递
subdata2 = reactive(biz1[which(biz1$Stock%in%input$sector),]&&biz1[which(biz1$Stock%in%input$yr)])
【问题讨论】:
任何帮助如何做到这一点 区分数据是什么意思?请提供一个可重现的例子。 表示如果我选择 10 月作为月份,它会显示 2016 年和 2017 年 10 月的数据,但我只想要 2017 年的数据 【参考方案1】:由于没有足够的信息并且没有可重复的示例,我试图解决这个问题,假设在 Shiny 中没有产生错误并且问题是对数据进行子集化。
您的数据子集代码
subdata2 = reactive(biz1[which(biz1$Stock%in%input$sector),]&&biz1[which(biz1$Stock%in%input$yr)])
我看到了 3 个错误:
which(biz1$Stock%in%input$yr)
,在这里您使用input$yr
值对Stock
列进行子集化
&&
与 &
的使用,这里较长的形式从左到右计算,只检查每个向量的第一个元素。查看?"&&"
了解更多信息
which
的使用,在您的代码中,您分别对同一数据框进行子集化,然后将它们与&&
进行比较,而不是您应该,例如。 biz1[which(biz1$Stock %in% input$sector & biz1$year %in% input$yr),]
完整解决方案
library(shiny)
biz1 = data.frame(Stock = 1:12, year = 2016:2017, test = c("a", "b", "c"),
stringsAsFactors = FALSE)
ui <- fluidPage(
uiOutput("Box3"),
uiOutput("Box4"),
dataTableOutput("tbl")
)
server <- function(input, output, session)
output$Box3 = renderUI(
selectInput("yr","select a year",c(unique(biz1$year),"pick one"),"pick one")
)
output$Box4= renderUI(
if (is.null(input$yr) || input$yr == "pick one")
return()
else selectInput("sector",
"Select a Month",
c(unique(biz1$Stock[which(biz1$year%in%input$yr)]),"pick one"),
"pick one")
)
# Note the usage of 'which' and '&' to subset the data frame
output$tbl <- renderDataTable(
biz1[which((biz1$Stock%in%input$sector) & (biz1$year%in%as.numeric(input$yr))), ]
)
shinyApp(ui, server)
【讨论】:
它不工作显示错误:-invalid 'x' type in 'x && y' 我不知道你尝试了什么。你能更详细一点吗?在上面的解决方案中,我没有使用&&
,所以我不能说错误来自哪里。【参考方案2】:
您可以使用过滤器 fn
subdata2 = reactive(
x <- filter(biz1,Stock%in%input$sector, year%in%input$yr)
x
)
【讨论】:
以上是关于如何在一个反应函数中传递两个输入以基于两者来区分数据的主要内容,如果未能解决你的问题,请参考以下文章