对象类型'关闭'不是闪亮的子集。使用简单的RGL绘图功能

时间:2016-07-14 02:57:34

标签: r shiny rgl

我使用rglshinyRGL包进行了闪亮编码,尝试通过让用户插入特定格式的csv文件来绘制3D线图。但是对象类型关闭错误不断出现。这似乎是因为它无法找到函数plot3d,或者我可能错了。

以下是代码:

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"))
   })
})

错误

  

警告:       packagehinyRGL?是在R版本3.3.1下构建的       警告:[[:对象类型&#39;关闭&#39;不是子集           堆栈跟踪(最里面的第一个):               70:plot3d               69:func [C:\ Users \ Ian \ workspace \ Leap的副本           SDK /测试\ APP_1 / server.R#19]               68:输出$ Aplot                1:runApp

2 个答案:

答案 0 :(得分: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,但事实并非如此。它是一个反应值,因此必须使用inFile()调用。使用theFrames调用的theFrames[[i]]也是如此,但应使用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"))

可能还有一些关于错误消息的附加信息:Shiny仅在需要时评估变量,因此包含错误的反应theFramesplot3d函数内部执行。这就是为什么错误消息会告诉您plot3d中的错误,即使错误位于其他地方也是如此。

答案 1 :(得分:0)

我建议你看一下你的命名约定。当我使用与包中定义的任何函数的名称或我定义的任何函数相同的变量名时,我总是看到这个错误。

例如:

header = input$header
inFile = input$file

你应该总是限制自己使用这些名称,它总是有用的。

谢谢:)