Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 筛选数据在错误中使用textinput:参数不是字符向量_R_Filter_Shiny - Fatal编程技术网

R 筛选数据在错误中使用textinput:参数不是字符向量

R 筛选数据在错误中使用textinput:参数不是字符向量,r,filter,shiny,R,Filter,Shiny,enc2utf8中出现错误:参数不是字符向量。 我使用selectInput、checkboxGroupInput、textInput来过滤服务器中的数据,并得到上述错误;我已经尝试过filter()、subset(),但当按四列以上的列过滤数据并且参数是字符向量时(例如,corp%在%c('Honda','Nissan')中),它们会出现相同的问题 数据集中有市场,公司,中型企业类型,中型企业id,度量,日期,价值列 在代码中,品牌,名称(tmp,年份是用于过滤数据的字符向量 库(闪亮) 图

enc2utf8中出现错误:参数不是字符向量。 我使用selectInput、checkboxGroupInput、textInput来过滤服务器中的数据,并得到上述错误;我已经尝试过filter()、subset(),但当按四列以上的列过滤数据并且参数是字符向量时(例如,corp%在%c('Honda','Nissan')中),它们会出现相同的问题

数据集中有市场公司中型企业类型中型企业id度量日期价值

在代码中,品牌名称(tmp年份是用于过滤数据的字符向量

库(闪亮)
图书馆(dplyr)
图书馆(DT)
ui尝试
打印(输入$measure)
在对所有数据进行子集之前,将其初始化为
NULL
。您应该添加:

if(is.null(input$measure))
  measure = unique(data_df$measure)
else
  measure = input$Measure
修改

measure==input$Measure,

因此,当用户未进行选择时,该列上实际上将没有过滤器


工作示例

以下内容对我来说很好。注意,我已经创建了自己的数据集“df”,并修改了您的tmp()reactive,因此在本例中它使用我的df作为输入数据集

df = data.frame(Market=c("Asia","Asia","Europe","Europe"),
                Corp=c("a","b","c","d"),
                Med_type = c('Imported','Joint Venture','Local','Local'),
                Med_id = c("Honda","Honda","Nissan","Nissan"),
                measure=c('Unit','RMB','Dollar','Dollar'),
                date = c('2017','2016','2017','2016'),
                value=c(1,2,3,4 ))


library(shiny)
library(dplyr)
library(DT)

ui<-fluidPage(pageWithSidebar(
  headerPanel('Table'),
  sidebarPanel(
    fileInput('file1', 'Upload Data',
              accept=c('text/csv', 'text/comma-separated-values,text/plain')),
    selectInput('TA',"Market-type",c('Asia','Europe')),
    selectInput('Length',"Length",c('1 year'='0','2 years'='1','3 years'='2','4 years'='3','5 years'='4')),        
    selectInput('NoBrand',"Top Brand/Cor",c('one'='1','two'='2','three'='3','four'='4','five'='5')),
    selectInput('Period',"Period",c('Quarter'='Quarter','YR'='year')),
    checkboxGroupInput('Measure','Measurement',c('Unit','RMB','Dollar')),
    selectInput('Med_type','Med_type',c('Imported','Joint Venture','Local')),
    textInput('Med_id','Med_id',value='Honda;Nissan')),


  mainPanel(
    dataTableOutput('table')
  )))




server<-function(input,output){
  options(shiny.maxRequestSize=100*1024^2)

  ## importing dataset
  tmp <- reactive({ 

  df

  })





  tmp2<-reactive({
    ## modify the inputs

    data_df <- tbl_df(tmp())
    year<-(2017-as.numeric(input$Length)):2017

    name_tmp<-as.vector(unlist(strsplit(input$Med_id,';')))

    temp_data<<-summarize(group_by(data_df,Corp),VValue=sum(value,na.rm = TRUE))

    brands<-as.vector(arrange(temp_data,desc(VValue))$Corp[1:as.numeric(input$NoBrand)])

    if(is.null(input$measure))
      measure = unique(data_df$measure)
    else
      measure = input$Measure

    ## filtering by the input
    mod_data<-data_df %>% 
      select(Market,Corp,Med_type,Med_id,measure,date,value) %>%
      filter(Market==input$TA,
             Corp%in%brands,
             Med_id%in%name_tmp,
             Med_type==input$Med_type,
             measure==measure,
            substr(date,1,4) %in% year
      )


    print(mod_data)

    ## Aggregation() & reformating
    if(input$Period=="year"){
      mod_data$date<-substr(mod_data$date,1,4)
      mod_data<-group_by_if(mod_data,is.character)
      mod_data<-summarise(mod_data,Value=sum(value,na.rm = TRUE))

    } else {mod_data<-summarise(group_by_if(mod_data,is.character),Value=sum(value,na.rm=TRUE))}




  })


  ## printing table

  output$table<-DT::renderDataTable({tmp2()})



}
shinyApp(ui=ui,server = server)
df=data.frame(市场=c(“亚洲”、“亚洲”、“欧洲”、“欧洲”),
公司=c(“a”、“b”、“c”、“d”),
Med_type=c(“进口”、“合资”、“本地”、“本地”),
Med_id=c(“本田”、“本田”、“日产”、“日产”),
计量单位=c(‘单位’、‘人民币’、‘美元’、‘美元’),
日期=c('2017'、'2016'、'2017'、'2016'),
值=c(1,2,3,4))
图书馆(闪亮)
图书馆(dplyr)
图书馆(DT)

ui问题已经解决了。错误实际上来自
spread()
函数。当存在空数据帧时,
spread()
将调用enc2utf8中的
错误:参数不是字符向量
。因此,我添加了一些条件参数,以防止运行shinyapp后数据帧为空。此外,
isolate()
也是用户控制输入执行的有用函数

我尝试添加if,但仍然得到相同的错误;我认为,当我仅通过
Market==input$TA,Med_type==input$Med_type,measure==input$measure,substr(date,1,4)%in%year
shinyApp进行筛选时,可能会限制筛选中使用的参数数量。你是否也修改了行
measure==input$measure,
to
measure==measure
与我的示例代码一样?这不是筛选器中的参数数。是的,是的。我将
textInput
替换为
selectizeInput
。现在,当我想按品牌过滤时会出现错误。当我重试时,当我想按品牌和Med_id过滤时,错误仍然会出现:(我使用
选项(shinny.fullstacktrace=TRUE)
并找到引入此错误的函数:
调用自:(函数(e){if(继承(e,“shinny.silent.error”))return()句柄警告:enc2utf8中的错误:参数不是字符向量
,但仍然不知道如何处理此错误
df = data.frame(Market=c("Asia","Asia","Europe","Europe"),
                Corp=c("a","b","c","d"),
                Med_type = c('Imported','Joint Venture','Local','Local'),
                Med_id = c("Honda","Honda","Nissan","Nissan"),
                measure=c('Unit','RMB','Dollar','Dollar'),
                date = c('2017','2016','2017','2016'),
                value=c(1,2,3,4 ))


library(shiny)
library(dplyr)
library(DT)

ui<-fluidPage(pageWithSidebar(
  headerPanel('Table'),
  sidebarPanel(
    fileInput('file1', 'Upload Data',
              accept=c('text/csv', 'text/comma-separated-values,text/plain')),
    selectInput('TA',"Market-type",c('Asia','Europe')),
    selectInput('Length',"Length",c('1 year'='0','2 years'='1','3 years'='2','4 years'='3','5 years'='4')),        
    selectInput('NoBrand',"Top Brand/Cor",c('one'='1','two'='2','three'='3','four'='4','five'='5')),
    selectInput('Period',"Period",c('Quarter'='Quarter','YR'='year')),
    checkboxGroupInput('Measure','Measurement',c('Unit','RMB','Dollar')),
    selectInput('Med_type','Med_type',c('Imported','Joint Venture','Local')),
    textInput('Med_id','Med_id',value='Honda;Nissan')),


  mainPanel(
    dataTableOutput('table')
  )))




server<-function(input,output){
  options(shiny.maxRequestSize=100*1024^2)

  ## importing dataset
  tmp <- reactive({ 

  df

  })





  tmp2<-reactive({
    ## modify the inputs

    data_df <- tbl_df(tmp())
    year<-(2017-as.numeric(input$Length)):2017

    name_tmp<-as.vector(unlist(strsplit(input$Med_id,';')))

    temp_data<<-summarize(group_by(data_df,Corp),VValue=sum(value,na.rm = TRUE))

    brands<-as.vector(arrange(temp_data,desc(VValue))$Corp[1:as.numeric(input$NoBrand)])

    if(is.null(input$measure))
      measure = unique(data_df$measure)
    else
      measure = input$Measure

    ## filtering by the input
    mod_data<-data_df %>% 
      select(Market,Corp,Med_type,Med_id,measure,date,value) %>%
      filter(Market==input$TA,
             Corp%in%brands,
             Med_id%in%name_tmp,
             Med_type==input$Med_type,
             measure==measure,
            substr(date,1,4) %in% year
      )


    print(mod_data)

    ## Aggregation() & reformating
    if(input$Period=="year"){
      mod_data$date<-substr(mod_data$date,1,4)
      mod_data<-group_by_if(mod_data,is.character)
      mod_data<-summarise(mod_data,Value=sum(value,na.rm = TRUE))

    } else {mod_data<-summarise(group_by_if(mod_data,is.character),Value=sum(value,na.rm=TRUE))}




  })


  ## printing table

  output$table<-DT::renderDataTable({tmp2()})



}
shinyApp(ui=ui,server = server)