2017-07-16 5 views
0

J'essaie de créer une application rapide qui permet à un utilisateur de sélectionner 3 variables et régénère une diffusion 3D avec scatter3D. Je continue à frapper cette erreur en utilisant brillant et je ne peux pas voir pour le rectifier.Générer dynamiquement un tracé avec scatter3d et Shiny

Error: not all arguments have the same length

Mon code fonctionne aussi si remplacer:

x = paste("df.output$",input$test,sep=""), 
y = paste("df.output$",input$test2,sep=""), 
z = paste("df.output$",input$test3,sep=""), 

avec

x = df.output$age_scaled 
y = df.output$freq_scaled 
z = df.output$bonus_scaled 

Ma fonction ui ressemble à ceci

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

fonction du serveur ressemble à ceci

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

Répondre

0

Votre code

x = paste("df.output$",input$test,sep="") 

ensembles x à une longueur de 1 vecteur de caractère. Si vous souhaitez sélectionner un composant d'un dataframe, utilisez

x = df.output[[input$test]] 

Votre code n'utilise pas non plus le paquet contenant scatter3d (ce n'est pas une fonction rgl). Il existe une fonction avec ce nom dans le package car et un nom similaire dans le package plot3D.

+0

Merci! Fonctionne maintenant. Désolé pour la bibliothèque. C'est exactement ce que vous avez sauf que j'ai x = df.output [, input $ test]. – dchow