2016-07-14 4 views
3

rglshinyRGLパッケージを使用して光沢を持たせて、ユーザーにcsvという特定の形式のファイルを挿入させて3D線図をプロットしようとしました。しかし、オブジェクトタイプのクロージャーエラーは、引き続き表示されます。それは、それが機能plot3dを見つけることができないかのように思える、または私は間違っている可能性があります。ここで タイプ 'closure'のオブジェクトは、光沢のあるサブセットではありません。単純なRGLプロット関数を使って作業する

はコードです:

UI

library(shiny) 
library(rgl) 
library(shinyRGL) 

# Define UI for application that draws a histogram 
shinyUI(fluidPage(
    titlePanel("title panel"), 

    sidebarLayout(
    sidebarPanel(
     helpText("Please select a CSV file with the correct format."), 
     tags$hr(), 
     fileInput("file","Choose file to upload",accept = c(
     'text/csv', 
     'text/comma-separated-values', 
     'text/tab-separated-values', 
     'text/plain', 
     '.csv', 
     '.tsv', 
     label = h3("File input")) 
    ), 
    tags$hr(), 
    checkboxInput('header', 'Header', TRUE), 

    actionButton("graph","PLOT!") 
    ), 


mainPanel(textOutput("text1"), 
      webGLOutput("Aplot"))) 
) 
) 

サーバー

library(shiny) 
library(rgl) 
library(shinyRGL) 

options(shiny.maxRequestSize = 9*1024^2) 
shinyServer(
    function(input, output) { 


    output$text1 <- renderText({ 
    paste("You have selected", input$select) 
    }) 
    output$"Aplot" <- renderWebGL({ 
     inFile <- reactive(input$file) 
     theFrames <- eventReactive(input$graph,read.csv(inFile$datapath, 
header = input$header)) 
plot3d(theFrames[[4]],theFrames[[5]],theFrames[[6]],xlab="x",ylab="y",zlab 
= "z", type = "l", col = ifelse(theFrames[[20]]>0.76,"red","blue")) 
    }) 
}) 

エラー

警告:? パッケージhinyRGLRのバージョンで構築された3.3.1 警告:[[でエラーが発生しました: 70:PLOT3D 69型 '閉鎖' はオブジェクトが スタックトレース(最も内側の最初の)subsettableされていません。 FUNC [C:\ユーザーはリープ SDK /テストのイアン\ワークスペース\コピーを\ \ APP_1/server.R#19] 68:出力$ Aplot 1:それはだからrunApp

+0

は、それがどこかにそれらの機能にあなたは明らかに動作しませんクロージャー(機能)を、サブセットしようとしているということです。静的なプレースホルダ(関数を実行させることがわかっているもの)でサブセット化された動的条件を交換して、問題の原因となっている用語を特定できるようにしてください。 – alistaire

+0

@alistaire問題は私のXYZパラメータ "theFrames [[...]]"内にあるようです。しかし、私はそれの原因や解決方法を知らない。 –

+0

'str(theFrames)'とは何ですか? – alistaire

答えて

5

、このエラーメッセージを忘れないでください光沢のあるアプリケーションには非常に典型的です。

これは、ほとんどの場合、反応的な価値があったものの、かっこでは使用しなかったことを意味します。あなたのコードについては

は、私がここにこの間違いを発見:

inFile <- reactive(input$file) 
theFrames <- eventReactive(input$graph,read.csv(inFile$datapath, 
    header = input$header)) 

plot3d(theFrames[[4]],theFrames[[5]],theFrames[[6]],xlab="x",ylab="y",zlab 
    = "z", type = "l", col = ifelse(theFrames[[20]]>0.76,"red","blue")) 

あなたは、通常の変数のよう​​を使用しますが、そうではありません。これは反応的な値なので、inFile()で呼び出さなければなりません。 theFrames[[i]]で呼び出されたtheFramesでも同じですが、theFrames()[[i]]で呼び出す必要があります。

だから正しいバージョンはたぶん

inFile <- reactive(input$file) 
theFrames <- eventReactive(input$graph,read.csv(inFile()$datapath, 
    header = input$header)) 

plot3d(theFrames()[[4]],theFrames()[[5]],theFrames()[[6]],xlab="x",ylab="y",zlab 
    = "z", type = "l", col = ifelse(theFrames()[[20]]>0.76,"red","blue")) 

エラーメッセージに関するいくつかの追加情報次のようになります。シャイニーがエラーを含む、彼らが必要な場合にのみ変数を評価し、その反応性theFrames、内部から実行されますplot3d機能。そのため、エラーが他の場所にある場合でも、エラーメッセージにはplot3dにあるエラーに関する情報が表示されます。

+0

あなたが言ったことに続いて「閉鎖」エラーを修正しました。ありがとうございます。しかし、今度は別のエラーメッセージが表示されます: 'Warning:Error in < - :無効な(NULL)の割り当ての左端 スタックトレース(最も内側のもの): 69:func [C:\ Users \ Ian \ workspace \ APIをリープする\ App_1/server.R#15] 68:出力$ Aplot 1:runApp ' –

+0

@IANLeeおそらくあなたのコードの中に '()'を入れすぎているかもしれません。答え[ここ](http://stackoverflow.com/questions/35769388/reactives-invalid-null-left-side-of-assignment)を参照してください。 –

0

あなたの命名規則を見ることをお勧めします。パッケージで定義された関数の名前や私の定義した関数の名前と同じ変数名を使用しているときに、私はいつもこのエラーを見てきました。例えば

:あなたは常に名前のこれらの種類を使用して自分を制限する必要があり

header = input$header 
inFile = input$file 

、それは常に有用であろう。それは、それが機能を見つけることができないということではありません

感謝:)

関連する問題