首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Filter_impl中的错误:结果必须长度为4090,而不是0

Filter_impl中的错误:结果必须长度为4090,而不是0
EN

Stack Overflow用户
提问于 2018-08-04 01:22:55
回答 1查看 4K关注 0票数 0

尝试运行一个闪亮的应用程序,但是继续获取filter_impl:中的错误:结果必须长度为4090,而不是0

我试过:

  • 通过删除单个筛选器来尝试隔离问题来进行调试。
  • dplyr::filter强制dplr滤波器
  • 确保所有过滤器处于无功函数中。
  • 检查这是否是在ui.R和server.r之间共享输入的问题。
  • 检查它是否是由以前的df转换引起的。

花了大约3个小时试图找出原因,但没有成功。

你能帮忙吗?

Server.R

代码语言:javascript
复制
rm(list = ls())

library(shiny)
library(tidyverse)
library(shiny)
library(ggplot2)
library(singer)
library(ggvis)
library(dplyr)


# Set Up DataFrames
data(package = "singer")
data(singer_locations)
sdf <- singer_locations %>% filter(year != 0) # filter out songs with missing years for simplicity
sdf %>% skim() %>% kable() # Check to see missing and incomplete values
sdf <- sdf %>% filter(complete.cases(.)) # filter out songs with missing observations for simplicity
sdf %>% skim() %>% kable() # Check to see if missing and incomplete values have been ignored

sdf <- sdf %>% select(
  track_id, title, song_id, release, artist_id, artist_name, year, duration, 
  artist_hotttnesss, artist_familiarity, name, city, longitude, latitude
)

# add new columns with rounded data (for nicer graphs later)
sdf$latitude_rounded <- round(sdf$latitude, 0)
sdf$longitude_rounded <- round(sdf$longitude, 0)
sdf$duration_rounded <- round(sdf$duration, 0)


# Add song_popularity & very_popular_song columns
pops <- sdf$artist_hotttnesss + sdf$artist_familiarity
sdf$artist_popularity <- round(pops, 0)
sdf$very_popular_song <- round(sdf$artist_popularity)
sdf$very_popular_song[sdf$very_popular_song < 1] <- "No"
sdf$very_popular_song[sdf$very_popular_song >= 1] <- "Yes"

# Select() relevant variables so they can be passed into server below (without having to use df[,"VAR"])
songs_list <- sdf %>% select(
  track_id, title, song_id, release, artist_id, artist_name, year, duration_rounded, duration, 
  artist_hotttnesss, artist_familiarity, name, city, latitude_rounded, longitude_rounded, longitude,
  latitude, artist_popularity, very_popular_song
)

#axis_variables <- reactive({
axis_variables <- c(
  "Length of Song (Seconds)" = "duration_rounded",
  "Rating" = "artist_hotttnesss",
  "Rating" = "artist_familiarity",
  "Year" = "year",
  "Popularity Rating" = "artist_popularity"
)

################################### SHINY SERVER #########################################
function(input, output) {

  songs <- reactive({  # Create Reactive Filtering Component
    duration_s <- input$duration_s
    artist_hotttnesss_s <- input$artist_hotttnesss_s
    artist_familiarity_s <- input$artist_familiarity_s
    latitude_s <- input$latitude_s
    longitude_s <- input$longitude_s
    year_s <- input$year_s
    artist_popularity_s <- input$artist_popularity_s


    # Apply filters
    songs_df <- songs_list %>%
      dplyr::filter(
        duration_rounded >= duration_s,
        artist_hotttnesss >= artist_hotttnesss_s,
        artist_familiarity >= artist_familiarity_s,
        latitude_rounded >= latitude_s,
        longitude_rounded >= longitude_s,
        year >= year_s,
        artist_popularity >= artist_popularity_s
      ) %>%
      arrange(duration_rounded)

    # filter by city option
    if (input$city_in != "All") {
      city_in_temp <- paste0("%", input$city_in, "%")
      songs_df <- songs_df %>% dplyr::filter(songs_df$city %like% city_in_temp)
    }

    # filter by artist_name option 
    if (input$artist_name_in != "" && !is.null(input$artist_name_in)) {
      artist_name_temp <- paste0("%", input$artist_name_in, "%")
      songs_df <- songs_df %>% dplyr::filter(songs_df$artist_name %like% artist_name_temp)
    }

      songs_df <- as.data.frame(songs_df)
      songs_df # return df

    })


  # search fuction
  song_search <- function(s) {
    if (is.null(s)) return(NULL)
    if (is.null(s$track_id)) return(NULL)

    # Isolate the given ID
    songs_df <- isolate(songs())
    temp_song <- songs_df[songs_df$track_id == s$track_id, ]

    paste0("<b>", temp_song$artist_name, "</b><br>",
           temp_song$year, "<br>",
           "popularity ", format(temp_song$artist_popularity, big.mark = ",", scientific = FALSE)
    )
  }

  # A reactive expression with the ggvis plot
  vis <- reactive({
    # setting variablex & variabley (input names are type str)
    variablex <- prop("x", as.symbol(input$variablex))    
    variabley <- prop("y", as.symbol(input$variabley))

    # Lables for axes
    xvar_name <- names(axis_variables)[axis_variables == input$variablex]
    yvar_name <- names(axis_variables)[axis_variables == input$variabley]

    songs %>%
      ggvis(x = variablex, y = variabley) %>%
      layer_points(size := 50, size.hover := 200,
                   fillOpacity := 0.2, fillOpacity.hover := 0.5,
                   stroke = ~artist_popularity, key := ~artist_name) %>%
      add_tooltip(song_search, "hover") %>%
      add_axis("x", title = xvar_name) %>%
      add_axis("y", title = yvar_name) %>%
      add_legend("stroke", title = "Very Popular", values = c("Yes", "No")) %>%
      scale_nominal("stroke", domain = c("Yes", "No"),
                    range = c("orange", "#aaa")) %>%
      set_options(width = 500, height = 500)
  })

  vis %>% bind_shiny("plot1")
  output$songs_selected <- renderText({ nrow(songs()) })

}

Ui.R

代码语言:javascript
复制
rm(list = ls())

library(tidyverse)
library(shiny)
library(ggplot2)
library(singer)
library(ggvis)
library(dplyr)


#axis_variables <- reactive({
axis_variables <- c(
    "Length of Song (Seconds)" = "duration_rounded",
    "Hotness Rating" = "artist_hotttnesss",
    "Familiarity Rating" = "artist_familiarity",
    "Year" = "year",
    "Popularity Rating" = "artist_popularity"
)

# Define UI for application that draws a histogram
shinyUI(fluidPage(
  shinythemes::themeSelector(),
  titlePanel("Artist & Song Data"),
  fluidRow(
    column(3,
           wellPanel(
             h4("Filter By"),
             # Slider Options for Data Exploration
             sliderInput("duration_s", "Minimum duration of song (seconds)", 10, 500, 100, step = 10),
             sliderInput("year_s", "Year released", 1900, 2018, value = c(1980, 2018)),
             sliderInput("artist_hotttnesss_s", "Ranking / 10 for popularity", 0, 2, 0, step = 0.1),
             sliderInput("artist_familiarity_s", "Ranking / 10 for familiarity", 0, 2, 0, step = 0.1),
             sliderInput("artist_popularity", "Ranking / 10 for familiarity", 0, 2, 0, step = 0.1),


             # Filter by custom input condition
             textInput("city_in", "Name of the city"),
             textInput("artist_name_in", "Artist's name contains (e.g Pink f)")
           ),
           wellPanel(
             selectInput("variablex", "X-axis", axis_variables, selected = "year"),
             selectInput("variabley", "Y-axis", axis_variables, selected = "duration_rounded")
           )
    ),

    column(9,
           ggvisOutput("plot1"),
           wellPanel(
             span("Degrees of Freedom",
                  textOutput("songs_selected")
             )
           )
    )
    )
EN

回答 1

Stack Overflow用户

发布于 2018-09-01 09:02:07

看起来您正在使用input$XXX创建的数据进行过滤。尝试将req(input$XXX, req(input$YYY, ...)放在反应性元素的开头。

还可以阅读这条推特关于从rm(list = ls())开始的内容。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51681682

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档