1

光沢のあるアプリに ggvis コードを組み込むのに苦労しています。Web 上で説明が見つからないエラーが表示されます。エラーは次のとおりです。

Error : No data supplied to mark.

誰かが私が間違っていることを教えてください。ありがとう!

ui.R:

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

サーバー.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")

})
4

1 に答える 1

0

私はよく知りませんgdataが、エラーについていくつかの疑いがあります。PLOTDFリアクティブ関数が dataframe を返すようですplotdf。プロットステートメント plotdf_read$dataに代わりにある理由がわかりません。データフレームから「データ」列を取得しようとしています-データフレームには列「a」と「b」しかないようです。を使用するつもりだと思います。plotdf_readplotdf_read$dataplotdf_read %>% ggvis...

また、リアクティブを ggvis に渡す際のちょっとしたコツがあります。現在、これは次のようなことを行っています。

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

基本的に、リアクティブ コンテキストで data.frame を取得し、それを ggvis に渡します。これは確かに機能しますが、もっと良い方法があると思います。

ggvis は「素のリアクティブ」を受け入れるように設計されています。リアクティブ自体を ggvis に渡すことができます。以下のコード セグメントではPLOTDF、ggvis と NOTに渡しPLOTDF()ます。

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

違いはなんですか?最初の例では、data.frame が変更されるたびに、ggvis 全体を再プロットします。2 番目の例では、data.frame が変更されるたびに、ggvis のデータ ポイントのみが再プロットされます。

編集: 文法と説明の改善。

于 2014-08-11T14:35:30.857 に答える