【问题标题】:R shiny modify reactive data frameR闪亮修改反应数据框
【发布时间】:2013-12-22 12:11:01
【问题描述】:

我正在尝试构建一个应用程序,我可以在其中选择数据文件 (input$dataset),然后添加一个新的 datetime 列,格式化日期和时间之前的列以使用 ggplot2 进行绘图。

我使用以前在批处理脚本和 Rstudio 中工作的“内部”。但现在我收到此错误消息:

没有适用于类对象的“内部”方法 “反应性”

如何将此方法应用于响应式对象?我应该使用另一个命令吗?绑定? ddply?

  datos=reactive({
    read.csv(input$dataset,header=T,sep=";",na.strings="-99.900")
    within(datos, datetime <- as.POSIXct(paste(FECHA,H_SOLAR),format = "%y/%m/%d %H:%M:%S"))        
  })

提前致谢

编辑:

按照下面的答案,我了解无法修改响应式源,例如在数据框中添加一列。关键是我想以这种方式使用 ggplot(改编旧的 R 脚本):

p=ggplot(datos(),aes_string(x="datetime", y=input$var,colour="as.character(stat_id)")) +
      geom_line()  
  }

那么,我应该如何将日期时间添加到 datos?也许将 datos2 创建为合并 datos 和 datetime 的新反应源?

编辑 2 将完整代码添加到 github https://github.com/pacomet/git

【问题讨论】:

  • 你试过没有within吗?所以只是datetime &lt;- as.POSIXct(paste(datos$FECHA,datos$H_SOLAR),format = "%y/%m/%d %H:%M:%S"))?
  • 嗨,我只使用了旧脚本中的命令,我还想用数据框保存新日期。我会试一试。谢谢。

标签: r shiny shiny-server


【解决方案1】:

您不能直接更改数据文件 - 它是一个响应式源,除非通过用户输入(在本例中为数据文件的选择),否则无法更改。

你有 2 个选择(据我所知):

1) 创建一个包含重新格式化日期的新对象:

NewDate<-reactive({ as.POSIXct(paste(FECHA,H_SOLAR),  
            format = "%y/%m/%d %H:%M:%S")})

然后使用NewDate() 作为图形变量。

2) 在制作图表的函数中更改日期格式。例如

plot(x~as.POSIXct(paste(FECHA,H_SOLAR),format="%y/%m/%d %H:%M:%S"),   
      data=datos())

这里有一个类似的问题:Formatting reactive data.frame

编辑 针对已编辑的问题 - 这是一个更新的答案。

我对@9​​87654325@ 了解不多,但如果问题是将这一切整合到一个data.frame 中,那么您可能想做这样的事情:

datos=reactive({read.csv(input$dataset,header=T,sep=";",na.strings="-99.900"))} 
NewDate<-reactive <- ({as.POSIXct(paste(FECHA,H_SOLAR),  
   format = "%y/%m/%d %H:%M:%S" )})  
datos2<-reactive({ data.frame(datos(),NewDate() })

然后尝试在ggplot 中使用datos2() - 我认为这应该可以满足您的需求。

【讨论】:

  • 谢谢,我会尝试第一个选项。
  • 嗨,这对我不起作用,因为我正在使用 ggplot 进行绘图。我需要向 datos 添加一列,而不是创建新对象。或者找到在ggplot中使用两个不同对象的方法。我要将 ggplot 命令添加到原始问题中。感谢您的帮助。
  • 嗨@john-paul 尝试了您的代码,但无法使其正常工作。我之前也尝试过类似的东西。它抱怨一个被转储到 Javascript 控制台的错误。如何检查该错误?
  • 与此同时,我使用 R 脚本预处理数据并在启动闪亮的应用程序之前添加了日期时间列。必须有一个闪亮的解决方案。我将尝试将数据和代码发布到 github,以便您查看完整的应用程序。谢谢
【解决方案2】:

由于@dieter-menne 对另一个关于子集反应数据帧的问题的回答,我认为这个问题可以结束。重点是创建一个新的局部变量,类似于@john-paul 的建议。

请看https://stackoverflow.com/a/20569512/709777

【讨论】:

    猜你喜欢
    • 2018-09-26
    • 2019-08-19
    • 2021-06-21
    • 1970-01-01
    • 2017-04-13
    • 2016-02-10
    • 2017-04-14
    • 2019-02-15
    • 2013-06-20
    相关资源
    最近更新 更多