Как изменить y в flexdashboard selectInput

#r #reactive #flexdashboard #selectinput

#r #реактивный #flexdashboard #selectinput

Вопрос:

Я пытаюсь создать гибкую панель с использованием данных IMDb, которая имеет интерактивный график дрожания, где вы можете изменить x и y для визуализации результата иерархической кластеризации. Код, который я уже создал, может изменить только x и число k. Я думаю, что мне следует использовать reactive функцию, но я не очень понимаю, как это использовать. Я уже перепробовал много других способов с YouTube и из некоторых документальных фильмов, но все еще не могу изменить y. Вот макет моей панели мониторинга, символ y застрял в переменной времени выполнения

 data=df %>% 
  select(Rating, Votes, Gross, Runtime, Metascore)

selectInput("x", label = "X : ",choices = names(data))

selectInput("y", label = "Y : ",choices = names(data))

sliderInput('k',"Cluster",min = 2,max = 10, value = 6)

selectedData=reactive({
  data %>% select(input$x, input$y)
})

data_scaled=scale(data)

dist_data=dist(data_scaled, method='euclidean')

hc_data=hclust(dist_data, method = "average")

renderPlot({
  ggplot(selectedData(),
         aes(x=!!rlang::sym(input$x), y=!!rlang::sym(input$y),
             col=factor(cutree(hc_data, k=input$k)))) 
    geom_jitter(size=5, alpha=0.5 ) 
    labs(col="Cluster")
})

 

Ответ №1:

Вот альтернативный пример, который, похоже, работает, используя diamonds набор данных из ggplot2 . Я предполагаю, что этапы масштабирования и кластеризации выполняются так долго, что кажется, что y reactive только не работает. Я бы посоветовал предварительно обработать ваши данные, если время выполнения приложения является проблемой.

 
data=diamonds[1:1e3,] %>% 
    dplyr::select(where(is.numeric))

selectInput("x", label = "X : ",choices = names(data))

selectInput("y", label = "Y : ",choices = names(data))

sliderInput('k',"Cluster",min = 2,max = 10, value = 6)

data_scaled=scale(data)

dist_data=dist(data_scaled, method='euclidean')

hc_data=hclust(dist_data, method = "average")

renderPlot({
    ggplot(data,
           aes(x=!!rlang::sym(input$x), y=!!rlang::sym(input$y),
               col=factor(cutree(hc_data, k=input$k)))) 
        geom_jitter(size=5, alpha=0.5 ) 
        labs(col="Cluster")
})