R - Shiny App - 使用 plotly 可视化 shinyMatrix 输入
R - Shiny App - Using plotly to visualize shinyMatrix input
)
我想使用 plotly
mesh3d-plot 可视化 shinyMatrix
的输入。我正在使用 for-loop
将矩阵输入转换为具有 3 列(x、y 和 z)的数据框 - 见下文。当 运行 在闪亮的应用程序之外时,这会起作用。不幸的是,我一直坚持在 reactive()
环境中使用这个 for 循环将其传递给 plot_ly()
。它说“闭包类型的对象不是可子集化的”。我读到,如果您不将反应对象视为函数(我这样做了),这个错误经常会出现。
我知道我是初学者,我对 shiny 应用程序的语法不太了解。很可能我犯了一个愚蠢的错误 :-) 但我不知道如何解决这个问题。
谢谢!
library(shiny)
library(shinyMatrix)
ui <- fluidPage( titlePanel("shinyMatrix: Simple App"),
sidebarPanel(width = 6,tags$h4("Data"),
matrixInput("mat",
value = matrix(1:100, 10, 10),
rows = list(names=T, extend = TRUE),
cols = list(names = TRUE))),
mainPanel(width = 6,
plotlyOutput(
"plotly",
width = "100%",
height = "400px",
inline = FALSE,
reportTheme = TRUE
)))
server <- function(input, output, session) {
df <- data.frame(x="", y="", z="")
df <- reactive({
n=1
for(i in 1:nrow(input$mat)){
for(j in 1:ncol(input$mat)){
df[n,1] <- j*laenge
df[n,2] <- i*laenge
df[n,3] <- input$mat[i,j]
n=n+1
}
}
})
output$plotly <- renderPlotly({plot_ly(df(), x=~x, y=~y, z=~z, type="mesh3d")})
}
shinyApp(ui, server)
主要问题是您对反应式数据框和数据框使用了相同的名称 df
。此外,您的反应必须 return 一些东西才能使您的代码正常工作,即 return for 循环之后的数据框。
server <- function(input, output, session) {
dd <- data.frame(x = NA, y = NA, z = NA)
df <- reactive({
n <- 1
for (i in 1:nrow(input$mat)) {
for (j in 1:ncol(input$mat)) {
dd[n, 1] <- j * laenge
dd[n, 2] <- i * laenge
dd[n, 3] <- input$mat[i, j]
n <- n + 1
}
}
dd
})
output$plotly <- renderPlotly({
plot_ly(df(), x = ~x, y = ~y, z = ~z, type = "mesh3d")
})
}
)
我想使用 plotly
mesh3d-plot 可视化 shinyMatrix
的输入。我正在使用 for-loop
将矩阵输入转换为具有 3 列(x、y 和 z)的数据框 - 见下文。当 运行 在闪亮的应用程序之外时,这会起作用。不幸的是,我一直坚持在 reactive()
环境中使用这个 for 循环将其传递给 plot_ly()
。它说“闭包类型的对象不是可子集化的”。我读到,如果您不将反应对象视为函数(我这样做了),这个错误经常会出现。
我知道我是初学者,我对 shiny 应用程序的语法不太了解。很可能我犯了一个愚蠢的错误 :-) 但我不知道如何解决这个问题。
谢谢!
library(shiny)
library(shinyMatrix)
ui <- fluidPage( titlePanel("shinyMatrix: Simple App"),
sidebarPanel(width = 6,tags$h4("Data"),
matrixInput("mat",
value = matrix(1:100, 10, 10),
rows = list(names=T, extend = TRUE),
cols = list(names = TRUE))),
mainPanel(width = 6,
plotlyOutput(
"plotly",
width = "100%",
height = "400px",
inline = FALSE,
reportTheme = TRUE
)))
server <- function(input, output, session) {
df <- data.frame(x="", y="", z="")
df <- reactive({
n=1
for(i in 1:nrow(input$mat)){
for(j in 1:ncol(input$mat)){
df[n,1] <- j*laenge
df[n,2] <- i*laenge
df[n,3] <- input$mat[i,j]
n=n+1
}
}
})
output$plotly <- renderPlotly({plot_ly(df(), x=~x, y=~y, z=~z, type="mesh3d")})
}
shinyApp(ui, server)
主要问题是您对反应式数据框和数据框使用了相同的名称 df
。此外,您的反应必须 return 一些东西才能使您的代码正常工作,即 return for 循环之后的数据框。
server <- function(input, output, session) {
dd <- data.frame(x = NA, y = NA, z = NA)
df <- reactive({
n <- 1
for (i in 1:nrow(input$mat)) {
for (j in 1:ncol(input$mat)) {
dd[n, 1] <- j * laenge
dd[n, 2] <- i * laenge
dd[n, 3] <- input$mat[i, j]
n <- n + 1
}
}
dd
})
output$plotly <- renderPlotly({
plot_ly(df(), x = ~x, y = ~y, z = ~z, type = "mesh3d")
})
}