r语言 - Rshiny,反应式热图,无法更改变量



我正在尝试用Rshing制作热图。用户必须能够选择两个变量:时间和方向。根据情况,热图会发生变化。

当我固定时间和方向的值时,我的代码就可以工作了。当我尝试使用被动输入时,它不起作用。

错误消息为:.getReactiveEnvironment()$currentContext()中的错误:没有活动的反应上下文,不允许操作。(你试图做一些只能从反应性表达或观察者内部完成的事情。)


JSd_inter是一个我可以在需要时向您展示的函数。在第一个例子中,我用"T1">固定了时间,用<strong]"both">

idt <- as.vector(unique(data$contratid))
n= length(idt)
a <- matrix(0, n,n)
colnames(a) <- idt
rownames(a) <- idt
for (i in 1:n) {
for (j in 1:n) {
a[i,j] <- JSD_inter(data,20,"T1","both",idt[i],idt[j])

}}

第二个不起作用的例子(即使我在函数中使用输入$timechoice而不是time(),它仍然不起作用)

time <- reactive({input$timechoice})
direction<- reactive({input$dirchoice})
idt <- as.vector(unique(data$contratid))
n= length(idt)
a <- matrix(0, n,n)
colnames(a) <- idt
rownames(a) <- idt
for (i in 1:n) {
for (j in 1:n) {
a[i,j] <- JSD_inter(data,20,time(),direction(),idt[i],idt[j])

}}

第3部分/绘制热图的代码(由于示例1正在工作,我不认为问题来自这里)

reorder_cormat <- function(cormat){
# Utiliser la corrélation entre les variables
# comme mésure de distance
dd <- as.dist((1-cormat)/2)
hc <- hclust(dd)
cormat <-cormat[hc$order, hc$order]
}
# Obtenir le triangle supérieur
get_upper_tri <- function(cormat){
cormat[lower.tri(cormat)]<- NA
return(cormat)
}
# Reorder correlation matrix
cormat <- reorder_cormat(a)
upper_tri <- get_upper_tri(cormat)
# Fondre la matrice de corrélation
melted_cormat <- melt(upper_tri, na.rm = TRUE)
# Créer un ggheatmap
ggheatmap <- ggplot(melted_cormat, aes(Var2, Var1, fill = value))+
geom_tile(color = "white")+
scale_fill_gradient2(low = "white", high = "red",  
midpoint = 0.09, limit = c(0,1), space = "Lab",
name="JSD") +
theme_minimal()+ # minimal theme
theme(axis.text.x = element_text(angle = 45, vjust = 1, 
size = 12, hjust = 1))+
coord_fixed()
output$heat <- renderPlot(ggheatmap)

我在我的shyniapp中使用ui发布热图。R,代码:

选项卡面板("热图",plotOutput("heat")),

如果你需要更多信息,请告诉我

感谢您抽出时间

direction()time()是反应性的。您不能在被动上下文之外使用它们。

试试这个:

myMatrix <- reactive({
idt <- as.vector(unique(data$contratid))
n= length(idt)
a <- matrix(0, n,n)
colnames(a) <- idt
rownames(a) <- idt
for (i in 1:n) {
for (j in 1:n) {
a[i,j] <- JSD_inter(data,20,time(),direction(),idt[i],idt[j])
}
}
a
})

然后

melted_cormat <- reactive({
cormat <- reorder_cormat(myMatrix())
upper_tri <- get_upper_tri(cormat)
melt(upper_tri, na.rm = TRUE)
})

最后,您必须在renderPlot中执行ggplot,因为它调用melted_cormat():

output$heat <- renderPlot({
ggplot(melted_cormat(), aes(Var2, Var1, fill = value))+
geom_tile(color = "white")+
scale_fill_gradient2(low = "white", high = "red",  
midpoint = 0.09, limit = c(0,1), space = "Lab",
name="JSD") +
theme_minimal()+ # minimal theme
theme(axis.text.x = element_text(angle = 45, vjust = 1, 
size = 12, hjust = 1))+
coord_fixed()
})

相关内容

  • 没有找到相关文章

最新更新