#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")
})