我使用rgl
和shinyRGL
包进行了闪亮编码,尝试通过让用户插入特定格式的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"))
})
})
错误
警告: packagehinyRGL?是在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
答案 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仅在需要时评估变量,因此包含错误的反应theFrames
从plot3d
函数内部执行。这就是为什么错误消息会告诉您plot3d
中的错误,即使错误位于其他地方也是如此。
答案 1 :(得分:0)
我建议你看一下你的命名约定。当我使用与包中定义的任何函数的名称或我定义的任何函数相同的变量名时,我总是看到这个错误。
例如:
header = input$header
inFile = input$file
你应该总是限制自己使用这些名称,它总是有用的。
谢谢:)