r - 数据框 - R - 闪亮
问题描述
我对 Shiny 和数据框的使用有疑问。
我想我明白我需要创建隔离或反应性的环境来与之交互,但是如果我尝试使用 Dataframe,我会收到一条错误消息:
Error in pfData: konnte Funktion "pfData" nicht finden
我试图通过这段代码来操作数据框:
server <- function(input, output) {
observeEvent(input$go,
{
pf_name <- reactive({input$pfID})
pf_date <- reactive({input$pfDate})
if (pf_name()!="please select a PF") {
pfData <- reactive(read.csv(file =paste(pf_name(),".csv",sep=""),sep=";",dec=","))
MDur <- pfData()[1,15]
pfData <- pfData()[3:nrow(pfData()),]
Total = sum(pfData()$Eco.Exp...Value.long)
}
})
}
如果我在控制台中操作我的数据框,它就可以正常工作:
pfData <- pfData[3:nrow(pfData),]
Total = sum(pfData$Eco.Exp...Value.long)
Assets = sum(as.numeric(gsub(",",".",gsub(".","",pfData$Value,fixed=TRUE),fixed=TRUE)))
pfData$Exposure <- with(pfData, Eco.Exp...Value.long /Total)
你能帮助我吗?
编辑:
library(shiny)
ui <- fluidPage(
fluidRow(
column(6, offset =3,
wellPanel(
"Choose Mandate and Date",
fluidRow(
column(4,selectInput("pfID",label = "",
choices = list("please select a PF","GF25",
"FPM"),
selected = "please select a PF") ),
column(4, dateInput("pfDate",label="",value = Sys.Date()) ),
column(2, actionButton("go","Submit")),column(2,textOutput("selected_var"))
)
)
)
)
)
# Define server logic ----
server <- function(input, output) {
pfDataReactive <- reactive({
input$go
if (pf_name()!="please select a PF") {
pfData <- read.csv(file =paste(pf_name(),".csv",sep=""),sep=";",dec=",")
MDur <- pfData[1,15]
pfData <- pfData[3:nrow(pfData),]
Total = sum(pfData$Eco.Exp...Value.long)
Assets = sum(as.numeric(gsub(",",".",gsub(".","",pfData$Value,fixed=TRUE),fixed=TRUE)))
pfData$Exposure <- with(pfData, Eco.Exp...Value.long /Total)
pfData
output$selected_var <- renderText({paste(MDur)})
}
})
}
# Run the app ----
shinyApp(ui = ui, server = server)
谢谢斯特凡
解决方案
如果没有一个可行的例子,就不可能确定你想要做什么,但听起来你需要 areactive
而不是使用observeEvent
.
尝试类似的东西
pfDataReactive <- reactive({
input$go
pfData <- read.csv(file =paste(pf_name(),".csv",sep=""),sep=";",dec=",")
Total = sum(pfData$Eco.Exp...Value.long)
Assets = sum(as.numeric(gsub(",",".",gsub(".","",pfData$Value,fixed=TRUE),fixed=TRUE)))
pfData$Exposure <- with(pfData, Eco.Exp...Value.long /Total)
pfData
})
然后在您在控制台代码中pfDataReactive()
引用的任何地方使用 Shiny 应用程序的服务器功能。pfData
独立的参考input$go
确保响应式将在input$go
更改/单击/等时更新。
更新
您的代码仍然存在重大问题。作为我给你的最后一行,你已经为输出对象添加了一个赋值reactive
,所以reactive
总是返回NULL
。这没有帮助,也是它“根本不活跃”的原因之一......
其次,您测试是否存在pf_name
在相关输入对象出现时调用的反应/函数input$pfID
。reactive
这是永远不会更新的另一个原因。
input$pfID
请注意我为提高对象的可读性而对定义所做的更改pfDataReactive
。(此更改也可能意味着您可以完全取消input$go
。)
正如您所说,我无权访问您的 csv 文件,因此无法完全测试您的代码。我已经修改了的主体,pfDataReactive
只是将mtcars
数据集作为字符串返回。我还编辑了我注释掉的代码,希望当您将它与真正的csv 文件一起使用时可以正确运行。
此代码似乎给出了您想要的行为。不过,如果我可以发表主观评论,我认为您的 GUI 布局令人震惊。;=)
library(shiny)
ui <- fluidPage(
fluidRow(
column(6, offset =3,
wellPanel(
"Choose Mandate and Date",
fluidRow(
column(4,selectInput("pfID",label = "",
# Modified to that "Pleaseselect a PF" returns NULL
choices = list("please select a PF"="","GF25", "FPM"),
selected = "please select a PF") ),
column(4, dateInput("pfDate",label="",value = Sys.Date()) ),
column(2, actionButton("go","Submit")),column(2,textOutput("selected_var"))
)
)
)
)
)
# Define server logic ----
server <- function(input, output) {
pfDataReactive <- reactive({
# Don't do anything until we have a PF csv file
req(input$pfID)
input$go
# Note the change to the creation of the file name
# pfData <- read.csv(file =paste(input$pfID,".csv",sep=""),sep=";",dec=",")
# pfData <- pfData[3:nrow(pfData),]
# Total = sum(pfData$Eco.Exp...Value.long)
# Assets = sum(as.numeric(gsub(",",".",gsub(".","",pfData$Value,fixed=TRUE),fixed=TRUE)))
# pfData$Exposure <- with(pfData, Eco.Exp...Value.long /Total)
# MDur <- pfData[1,15]
# If you want to print MDur in the selected_var output, MDur should be the retrun value from this reactive
# MDur
mtcars
})
output$selected_var <- renderText({
print("Yep!")
as.character(pfDataReactive())
})
}
# Run the app ----
shinyApp(ui = ui, server = server)
下一次,拜托,拜托,更加努力地提供一个MWE。 这篇文章可能会有所帮助。
这是对 Shiny 的一个很好的介绍。
推荐阅读
- reactjs - ReactJs 网络摄像头 多个网络摄像头提要
- anylogic - 在 Windows 10 上安装 AnyLogic PE 时遇到问题
- c# - 如何使用 C#/SQL 批量更新 1000 条记录
- r - 根据ggplot2中的数据框旋转geom_point - R
- r - R中具有优先级的异步依赖期货
- performance - 哪一组指令性能更好?
- node.js - 如何通过firebase云http功能将cookie设置为具有跨域的前端?
- java - 是 'peek().min; ' 返回此代码中的最小值?
- html - 为什么 SVG 图标不出现在标题中?
- c - 在宏中连接指向字符串文字的指针