2015-09-23 3 views
1

Я строю блестящее приложение, которое использует dplyr и ggvis. Я могу запустить приложение, хотя появляется сообщение об ошибке:«Аргумент - длина ноль» на блестящем + ggvis app

Ошибка в if (тег $ name% in% c ("area", "base", "br", "col », "команда", "врезать",: аргумент длины нулевой

Вот мой ui.R:

`library(shiny) 
library("ggvis") 

shinyUI(fluidPage( 

titlePanel("Visual Stock Screener"),  

sidebarLayout(
sidebarPanel(
    numericInput("MinMarketCap", 
       "Min Market Cap (in Tens of Millions)", 
       value = 10, 
       min = 1, 
       max = 60000), 
    numericInput("MaxMarketCap", 
       "Max Market Cap (in Tens of Millions)", 
       value = 5000, 
       min = 1, 
       max = 60000), 
    numericInput("MinDivYield", 
       "Min Div Yield:", 
       value = 0.04, 
       min = 0, 
       max = 1),     

    numericInput("MaxDivYield", 
       "Max Div Yield:", 
       value = 0.14, 
       min = 0, 
       max = 1), 

    numericInput("MinPayoutRatio", 
       "Min Payout Ratio:", 
       value = 0, 
       min = 0), 
    numericInput("MaxPayoutRatio", 
       "Max Payout Ratio:", 
       value = 0.4, 
       min = 0),  

    numericInput("MinPriceBook", 
       "Min Price/Book Ratio:", 
       value = 0, 
       min = 0), 

    numericInput("MaxPriceBook", 
       "Max Price/Book Ratio:", 
       value = 3, 
       min = 0), 

    numericInput("MinPriceSales", 
       "Min Price/Sales Ratio:", 
       value = 0, 
       min = 0), 
    numericInput("MaxPriceSales", 
       "Max Price/Sales Ratio:", 
       value = 7, 
       min = 0)  

), 

mainPanel(
    tabsetPanel(type="tab", 
       tabPanel("Plot",ggvisOutput("visplot"),uiOutput("visplot_ui")) 

      ) 


) 
)))` 

Вот мой server.R:

`library(shiny) 
library("ggvis") 
library(dplyr) 

#import file created by screener.R 

final <- read.csv("final.csv") 

# Define server logic required to draw a histogram 

shinyServer(function(input, output) { 



output$visplot_ui <- renderUI({ 

allviz <- na.omit(final) 
allviz <- filter(allviz, DivYield >= input$MinDivYield) 
allviz <- filter(allviz, DivYield <= input$MaxDivYield) 
allviz <- filter(allviz, PAYOUTRATIO >= input$MinPayoutRatio) 
allviz <- filter(allviz, PAYOUTRATIO <= input$MaxPayoutRatio) 
allviz <- filter(allviz, PriceBook >= input$MinPriceBook) 
allviz <- filter(allviz, PriceBook <= input$MaxPriceBook) 
allviz <- filter(allviz, PriceSales >= input$MinPriceSales) 
allviz <- filter(allviz, PriceSales <= input$MaxPriceSales) 
allviz <- filter(allviz, MarketCapinMil >= input$MinMarketCap) 
allviz <- filter(allviz, MarketCapinMil <= input$MaxMarketCap) 

allviz$id <- 1:nrow(allviz) 

allviztip <- function(x) { if(is.null(x))return(NULL) 
          row <- allviz[allviz$id == x$id,c(1,4,7,8,9,10)] 
          paste0(names(row),":",format(row)," </div>",collapse="<br />")} 

allviz[1:20,] %>% ggvis(x=~PriceBook,y=~DivYield,key:=~id,size=~MarketCap,shape=~PayoutCat,fill=~PriceSales) %>% 
    layer_points() %>% add_tooltip(allviztip,"hover") %>% bind_shiny("visplot","visplot_ui") 

}) 

}) 

` 

Я прошел через предыдущие вопросы StackOverflow, связанные с этим вопросом, и могу подтвердить, что некоторые из наиболее распространенных причин являются не тем случаем:

  1. У меня есть полный набор данных. final.csv отфильтровывает значения NA (посредством функции na.omit).
  2. Я удалил каждый фильтр один за другим, и ошибка по-прежнему сохраняется. поэтому я не считаю, что это связано с именами фильтров или логикой.
  3. Я вынул всплывающую подсказку, и ошибка по-прежнему сохраняется.
  4. Ошибка не возникает за пределами блестящей, то есть при запуске приложения локально в RStudio.

Таким образом, я подозреваю, что существует некоторая проблема с одной из функций, которые R использует для визуализации HTML, что, в свою очередь, заставляет меня думать, что в ui.R. есть какой-то вопрос. Но кроме этого я расстроен и застрял ..... какие-то идеи?

+0

Вы можете заменить строку 'final <- read.csv' ссылкой на образец данных? – Chris

ответ

0

У меня была точно такая же ошибка, хотя вообще не использую ggvis. Я искал общие черты между вашим кодом и моим, которые генерируют ту же ошибку. Проблема, я думаю, в том, что вы используете динамический интерфейс с uiOutput, и ваш renderUI(), похоже, не устанавливает никаких выходных элементов. Я не понимал, в чем роль shiny_bind(), но вы можете просто попробовать добавить простой html-вывод, как p("this is a test") в конце вашего renderUI().