2017-01-12 10 views
1

現在のバージョンのRStudio、R、およびすべてのRパッケージを実行しています。Shiny uiの相互依存ウィジェット

以下のサンプルコードでは、xcolとycolの最大値を設定して、プロットされているデータフレームの列数に制限しています。次のコードは、エラー "オブジェクト '入力'が見つかりませんでした。私は問題が私が依存するウィジェットを作っているかもしれないと思うが、それは私のところでは推測だ。それは問題なのですか、それを回避するために私が使用できる戦略があります。

私は同じエラーを含む投稿をレビューしましたが、私の質問に答えたものは見つかりませんでした(または、それがいつ回答したかはわかりませんでした)。 R Shiny renderImage() does not recognize object 'input'; Error in eval: object 'input' not found in R Shiny app; Conditional initial values in shiny UI?

ここには、ランダムなデータを持つ再現可能なコードがあります。

library(tidyverse) 
library(cluster) 
library(vegan) 
library(shiny) 

dta <- rnorm(100, mean = 0, sd = 1) 
mat <- matrix(dta, nrow = 10) 
dm <- daisy(mat, metric = "euclidean") %>% as.matrix() 

server <- function(input, output) { 
    output$plot <- renderPlot({ 
     nmds <- metaMDS(dm, distance = "euclidean", k = input$dim, trymax = 2000, autotransform = FALSE, noshare = FALSE, wascores = FALSE) 
     df <- nmds$points %>% as.data.frame() 
     plot(df[,input$xcol], df[,input$ycol]) 
    }, height = 500, width = 500) 
} 

ui <- fluidPage(
     sidebarLayout(
     sidebarPanel(
      numericInput("dim", "Number of dimensions", value = 2, min = 2, max = 12), 
      numericInput("xcol", "X column", value = 1, min = 1, max = input$dim), 
      numericInput("ycol", "Y column", value = 2, min = 1, max = input$dim) 
     ), 
      mainPanel(
       plotOutput("plot") 
     ) 
    ) 
    ) 

答えて

0

あなたは、サーバーからのUIを変更するためにupdateNumericInputを使用することができます。

# Modify ui to use initial max 
ui <- fluidPage(
    sidebarLayout(
    sidebarPanel(
     numericInput("dim", "Number of dimensions", value = 2, min = 2, max = 12), 
     numericInput("xcol", "X column", value = 1, min = 1, max = 2), 
     numericInput("ycol", "Y column", value = 2, min = 1, max = 2) 
    ), 
    mainPanel(
     plotOutput("plot") 
    ) 
) 
) 


# Modify server to update max when dim changes 
# (notice the session parameter needed for updateNumericInput) 
server <- function(input, output, session) { 
    output$plot <- renderPlot({ 
    if(input$xcol>input$dim) 
     updateNumericInput(session, "xcol", value=input$dim, max=input$dim) 
    else 
     updateNumericInput(session, "xcol", max=input$dim) 
    if(input$ycol>input$dim) 
     updateNumericInput(session, "ycol", value=input$dim, max=input$dim) 
    else 
     updateNumericInput(session, "ycol", max=input$dim) 
    nmds <- metaMDS(dm, distance = "euclidean", k = input$dim, trymax = 2000, autotransform = FALSE, noshare = FALSE, wascores = FALSE) 
    df <- nmds$points %>% as.data.frame() 
    plot(df[,min(input$dim,input$xcol)], df[,min(input$dim,input$ycol)]) 
    }, height = 500, width = 500) 
} 
+0

xcolというかycolが最大 – HubertL

+0

であったが、私は薄暗いの減少を考慮に入れて編集し、私は本当に感謝、ありがとう手伝い。何らかの理由で最初の数回は動作しませんでしたが、今はすばらしく動作しており、ロジックを理解し始めています。 – user3550400

関連する問題