使用 scatter3d 和 Shiny 动态生成绘图
Dynamically Generating Plot with scatter3d and Shiny
我正在尝试创建一个 quick 应用程序,让用户 select 3 个变量并使用 scatter3D 重新生成 3D 散点图。我在使用 shiny 时一直遇到这个错误,但我无法纠正它。
Error: not all arguments have the same length
如果替换:
,我的代码也有效
x = paste("df.output$",input$test,sep=""),
y = paste("df.output$",input$test2,sep=""),
z = paste("df.output$",input$test3,sep=""),
和
x = df.output$age_scaled
y = df.output$freq_scaled
z = df.output$bonus_scaled
我的 ui 函数如下所示
ui <- fluidPage(
titlePanel("3 Dimensional Cluster Analysis"),
sidebarLayout(
sidebarPanel(
selectInput("test", "X-Axis", choices=colnames(df.output) ,
selected=colnames(df.output[1]), width = NULL, size = NULL),
selectInput("test2", "Y-Axis", choices=colnames(df.output),
selected=colnames(df.output[2]), width = NULL, size = NULL),
selectInput("test3", "Z-Axis", choices=colnames(df.output),
selected=colnames(df.output[3]), width = NULL, size = NULL)),
mainPanel(
rglwidgetOutput("plot", width = 1000, height = 500)
)
))
服务器函数如下所示
library(rgl)
server <- (function(input, output)
{
# reactive({
# a <- paste("df.output$",test$input,sep="")
# })
output$plot <- renderRglwidget(
{
rgl.open(useNULL=T)
scatter3d(
x = paste("df.output$",input$test,sep=""),
y = paste("df.output$",input$test2,sep=""),
z = paste("df.output$",input$test3,sep=""),
groups = as.factor(df.output$Cluster),
grid=FALSE,
surface=FALSE,
ellipsoid=TRUE,
ellipsoid.alpha=0.5,
fit=smooth,
xlab=input$test,
ylab=input$test2,
zlab=input$test3
)
par3d(mouseMode = "trackball")
rglwidget()
})
})
您的代码
x = paste("df.output$",input$test,sep="")
将 x 设置为长度为 1 的字符向量。如果您想 select 来自数据框的组件,请使用
x = df.output[[input$test]]
您的代码也不使用包含 scatter3d
的包(它不是 rgl
函数)。在 car
包中有一个同名的函数,在 plot3D
包中有一个类似的名称。
我正在尝试创建一个 quick 应用程序,让用户 select 3 个变量并使用 scatter3D 重新生成 3D 散点图。我在使用 shiny 时一直遇到这个错误,但我无法纠正它。
Error: not all arguments have the same length
如果替换:
,我的代码也有效x = paste("df.output$",input$test,sep=""),
y = paste("df.output$",input$test2,sep=""),
z = paste("df.output$",input$test3,sep=""),
和
x = df.output$age_scaled
y = df.output$freq_scaled
z = df.output$bonus_scaled
我的 ui 函数如下所示
ui <- fluidPage(
titlePanel("3 Dimensional Cluster Analysis"),
sidebarLayout(
sidebarPanel(
selectInput("test", "X-Axis", choices=colnames(df.output) ,
selected=colnames(df.output[1]), width = NULL, size = NULL),
selectInput("test2", "Y-Axis", choices=colnames(df.output),
selected=colnames(df.output[2]), width = NULL, size = NULL),
selectInput("test3", "Z-Axis", choices=colnames(df.output),
selected=colnames(df.output[3]), width = NULL, size = NULL)),
mainPanel(
rglwidgetOutput("plot", width = 1000, height = 500)
)
))
服务器函数如下所示
library(rgl)
server <- (function(input, output)
{
# reactive({
# a <- paste("df.output$",test$input,sep="")
# })
output$plot <- renderRglwidget(
{
rgl.open(useNULL=T)
scatter3d(
x = paste("df.output$",input$test,sep=""),
y = paste("df.output$",input$test2,sep=""),
z = paste("df.output$",input$test3,sep=""),
groups = as.factor(df.output$Cluster),
grid=FALSE,
surface=FALSE,
ellipsoid=TRUE,
ellipsoid.alpha=0.5,
fit=smooth,
xlab=input$test,
ylab=input$test2,
zlab=input$test3
)
par3d(mouseMode = "trackball")
rglwidget()
})
})
您的代码
x = paste("df.output$",input$test,sep="")
将 x 设置为长度为 1 的字符向量。如果您想 select 来自数据框的组件,请使用
x = df.output[[input$test]]
您的代码也不使用包含 scatter3d
的包(它不是 rgl
函数)。在 car
包中有一个同名的函数,在 plot3D
包中有一个类似的名称。