R ggvis错误“没有提供给标记的数据”

时间:2014-08-11 10:39:02

标签: r shiny ggvis

我正在努力将ggvis代码整合到我的闪亮应用中。我得到一个错误,我在网上找不到的描述。错误是:

Error : No data supplied to mark.

可以请某人说出我做错了什么吗?谢谢!

ui.R:

shinyUI(pageWithSidebar(
  headerPanel("test"),
  sidebarPanel(
    fileInput("INPUT","Upload your .xls:")
  ),
  mainPanel(
    ggvisOutput("PLOT")
  )
))

server.R:

library(ggvis)

shinyServer(function(input, output, session) {

  PLOTDF<-reactive({
    if (is.null(input$INPUT)==F) {

      library(gdata)
      tax<-read.xls(input$INPUT$datapath,check.names=F)

      plotdf<-data.frame(c(tax[1,1],tax[1,2]),c(tax[2,1],tax[2,2]))
      colnames(plotdf)<-c("a","b")

      plotdf

    }
  })

  reactive({
    plotdf_read<-PLOTDF()
    plotdf_read$data %>% ggvis(x=~a,y=~b) %>% layer_points()
    }) %>% bind_shiny("PLOT")

})

1 个答案:

答案 0 :(得分:0)

我不熟悉gdata,但我对这个错误有一些怀疑。看来您的PLOTDF被动函数将返回数据框plotdf。我不确定为什么你的情节陈述中有plotdf_read$data代替plotdf_readplotdf_read$data正在尝试从数据框中获取“数据”列 - 看起来数据框只有列“a”和“b”。我认为你的意思是使用plotdf_read %>% ggvis...

当涉及将被动反应传递给ggvis时,这也是一个小技巧。现在你正在做类似的事情:

reactive({
  PLOTDF() %>% ggvis(x=~a,y=~b) %>% layer_points()
  }) %>% bind_shiny("PLOT")

基本上,您在响应式上下文中获取data.frame并将其传递给ggvis。这肯定会奏效,但我认为有更好的方法。

ggvis旨在接受“裸反应” - 我们可以将反应本身传递给ggvis。在下面的代码段通知中,我将PLOTDF传递给ggvis而不是PLOTDF()

PLOTDF %>% ggvis %>% ggvis(x=~a,y=~b) %>% layer_points()
%>% bind_shiny("PLOT")

有什么区别?在第一个示例中,每次data.frame更改时,您将重新绘制整个ggvis。在第二个示例中,每次data.frame更改时,ggvis中的数据点都将重新绘制。

编辑:改进语法和解释。