如何解决R Shiny - 我在“Renderplot”中创建了一个数据框,并希望在此之外访问它我怎样才能使它具有反应性?
我在渲染绘图函数中创建了一个数据框并绘制了它。我想访问此数据框中“基金”列的最后一个值并将其插入到信息框中。在附加的代码中,我的信息框中的基金价值没有反应。
我尝试简单地获取生成数据框的代码块并将其插入到反应函数中,然后在信息框和渲染图函数中调用它,但随后两者都无法工作。是否可以创建反应式数据框?如果是这样,我可以只访问数据框中的一个值吗?我对这一切都很陌生,所以如果以下代码混乱,我深表歉意。
server <- function(input,output) {
output$line <- renderPlot({
intrate <- input$int/100 #where I created the data frame
fund <- as.numeric()
return <- as.numeric()
draw <- as.numeric()
fund[1] <- input$pot
draw[1] <- input$dd
age <- c(input$age:94)
for(i in 1:(95-input$age)){
draw[i+1] <- draw[i]*(1+input$inf/100)
return[i] <- fund[i]*intrate
fund[i+1] <- max(0,fund[i] + return[i] - draw[i])
}
draw <- head(draw,-1)
fund<- head(fund,-1)
data <- as.data.frame(cbind(age,fund,draw,return))
#my plot
ggplot(data = data,mapping = aes(age,fund)) +
geom_line(color="red",size=1,alpha=0.9,linetype=1) +
scale_y_continuous(labels = function(x) format(x,scientific = FALSE),limits = c(0,NA))+
labs(y = "Fund (€)",x = "Age (Years)")+
theme_light()
})
output$fad <- renderInfoBox( ##where I want to access fund for an infoBox
infoBox(title = "Fund at Death",paste0(round(tail(fund,n=1),2)),icon = icon("credit-card"),color = "blue")
)
}
为了提供上下文,我正在创建一个养老金提取计算器,其中输入退休年龄,假设死亡年龄为 95 岁。
解决方法
这样应该可以:
server <- function(input,output) {
data <- reactive({
intrate <- input$int/100 #where I created the data frame
fund <- as.numeric()
return <- as.numeric()
draw <- as.numeric()
fund[1] <- input$pot
draw[1] <- input$dd
age <- c(input$age:94)
for(i in 1:(95-input$age)){
draw[i+1] <- draw[i]*(1+input$inf/100)
return[i] <- fund[i]*intrate
fund[i+1] <- max(0,fund[i] + return[i] - draw[i])
}
draw <- head(draw,-1)
fund<- head(fund,-1)
data <- as.data.frame(cbind(age,fund,draw,return))
})
output$line <- renderPlot({
#my plot
ggplot(data = data(),mapping = aes(age,fund)) +
geom_line(color="red",size=1,alpha=0.9,linetype=1) +
scale_y_continuous(labels = function(x) format(x,scientific = FALSE),limits = c(0,NA))+
labs(y = "Fund (€)",x = "Age (Years)")+
theme_light()
})
output$fad <- renderInfoBox( ##where I want to access fund for an infobox
infoBox(title = "Fund at Death",paste0(round(tail(fund,n=1),2)),icon = icon("credit-card"),color = "blue")
)
}
总结:您将 data.frame 部分放入反应式表达式中,我们通过引用 data() 将其调用到绘图中
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。