gpt4 book ai didi

r - `filter()` 输入 `..1` 有问题。 Shiny 的R

转载 作者:行者123 更新时间:2023-12-04 02:25:46 27 4
gpt4 key购买 nike

我正在尝试构建一个 Shiny 的应用程序,它根据用户条目过滤数据框,但是,我正在努力使用我创建的函数来执行此任务,错误 'filter()' 问题输入'..1'。 x 输入“..1”的大小必须为 9 或 1,而不是 0。 一直出现。我发现了一个类似的问题 here但答案没有帮助。

这是我的代码。这里还有 xlsxcsv包含示例数据的文件。

非常感谢你的帮助

library(shiny)
library(dplyr)
library(shinythemes)
library(shinydashboard)
library(shinyjs)

ui <- fluidPage(
useShinyjs(),
theme = shinytheme("flatly"),
tabsetPanel(
id = "tabs",
tabPanel("Portafolio",
sidebarLayout(
sidebarPanel(
titlePanel("Seleccione las variables deseadas"),
uiOutput('fondo'),
uiOutput('reg'),
uiOutput('seguro'),
uiOutput('prod_sap'),
hr(),
actionButton("addbutton","Añadir")
),
mainPanel(
titlePanel("Vista previa del portafolio"),
tableOutput('courseTable'),
actionButton(inputId = "continue", label = "Cotizar")
)
)
),
tabPanel("Cotización",
tableOutput('envio'))
)
)


server <- function(input, output, session) {
fondo_edo <- reactive ({
read.csv("E:/Input Fondo-Edo-Reg_example.csv")
})

output$fondo <- renderUI({
times <- input$addbutton
fondos_todos <- as.vector(unique(fondo_edo()$FONDO))
div(id= letters[(times %% length(letters)) + 1],
selectInput("fondo_selec","Fondo:", choices=fondos_todos,selectize = T))
})

fondo_edo1 <- reactive({
subset(fondo_edo(), FONDO %in% input$fondo_selec)
})

output$reg <- renderUI({
reg_todos <- as.vector( unique(fondo_edo1()$REGIÓN) )
selectInput("reg_selec","Región:", choices=reg_todos, selectize = F)
})

output$seguro <- renderUI({
times <- input$addbutton
div(id=letters[(times %% length(letters))+1],
selectInput("seguro_selec","Seguro agricultura protegida:", choices=c("","Cosecha_Esp", "Inversión", "Planta"), selectize = F))
})

output$prod_sap <- renderUI({
times <- input$addbutton
div(id=letters[(times %% length(letters))+1],
conditionalPanel("input.seguro_selec == 'Inversión'",
selectInput("prod_sap_selec","Nombre producto SAP:", choices= "Tradicional")),
conditionalPanel("input.seguro_selec != 'Inversión'",
selectInput("prod_sap_selec2","Nombre producto SAP:",choices = c("","Establecimiento", "Mantenimiento", "Producción"), selectize = F)))
})

values <- reactiveValues()
values$df <- data.frame("Fondo" = numeric(0), "Región"= numeric(0), "Tipo de práctica"= numeric(0),
"Seguro agricultura protegida"= numeric(0))

newEntry <- observe({
if(input$addbutton > 0) {

newLine <- isolate(c(input$fondo_selec, input$reg_selec,
"RIEGO",
ifelse(input$seguro_selec=="Planta", paste0(input$seguro_selec,"/",input$prod_sap_selec2),
input$seguro_selec)))
isolate(values$df[nrow(values$df) + 1,] <-newLine)
}
})

output$courseTable <- renderTable({values$df})

observeEvent(input$continue, {
updateTabsetPanel(session = session, inputId = "tabs", selected = "Cotización")
})

cotizacion <- reactive({
isolate(busca_folios(fondo_edo(),values$df$Fondo, values$df$Región,
values$df$Seguro.agricultura.protegida))
})
output$envio <- renderTable({cotizacion()})

# cotizacion <- reactiveValues()
# cotizacion$df <- busca_folios(fondo_edo(),values$df$Fondo, values$df$Región,
# values$df$Sistema.de.producción, values$df$Seguro.agricultura.protegida)
#
# output$envio <- renderTable({cotizacion$df})
}


runApp(shinyApp(ui,server))


#### Funciones ####

busca_folios <- function(tabla_fondos, fondo, reg, cultivo, seguro){
historico_folios <- readxl::read_xlsx("E:/historico_example.xlsx")

fn <- tabla_fondos[which(tabla_fondos$FONDO == fondo),]$`CLAVE FONDO`
fond <- ifelse(nchar(fn)==1,paste0("000",fn),ifelse(nchar(fn)==2, paste0("00",fn),
ifelse(nchar(fn)==3, paste0("0",fn),fn)))
rg <-tabla_fondos[which(tabla_fondos$REGIÓN == reg),]$CVE_REGION
region <- ifelse(nchar(rg)==1, paste0("00",rg),ifelse(nchar(rg)==2,paste0("0",rg),rg))

buscada <<- historico_folios %>%
dplyr::filter(Fondo==fond,
Región == region, Subramo == seguro)
}

最佳答案

您的代码有几个问题:

  1. 您检查 Fondo==fond。但是,该参数称为 fondo
  2. 您的函数有四个参数,而您只用三个参数调用它:busca_folios(fondo_edo(),values$df$Fondo, values$df$Región, values$df$Seguro.agricultura.protegida)。因此缺少参数 segura
  3. 至少在我的机器上 Región == region 给了我一个错误,我通过将 Región 放在反引号“`”中来修复该错误
  4. 在过滤器中,您通过 == 检查是否相等,即使在解决其他问题之后,这也是您收到错误的原因。取而代之的是 %in%

固定函数如下所示:

busca_folios <- function(tabla_fondos, fondo, reg, cultivo, seguro){
historico_folios <- readxl::read_xlsx("historico_example.xlsx")

fn <- tabla_fondos[which(tabla_fondos$FONDO == fondo),]$`CLAVE FONDO`
fond <- ifelse(nchar(fn)==1,paste0("000",fn),ifelse(nchar(fn)==2, paste0("00",fn),
ifelse(nchar(fn)==3, paste0("0",fn),fn)))
rg <-tabla_fondos[which(tabla_fondos$REGIÓN == reg),]$CVE_REGION
region <- ifelse(nchar(rg)==1, paste0("00",rg),ifelse(nchar(rg)==2,paste0("0",rg),rg))

buscada <<- historico_folios %>%
dplyr::filter(Fondo %in% fondo,
Región %in% region, Subramo %in% seguro)
}

固定调用如下:

cotizacion <- reactive({
isolate(busca_folios(fondo_edo(),values$df$Fondo, values$df$Región,
seguro = values$df$Seguro.agricultura.protegida))
})

修复这些问题后的结果如下:

enter image description here

关于r - `filter()` 输入 `..1` 有问题。 Shiny 的R,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67828079/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com