2

我正在尝试构建一个应用程序,我可以在其中选择数据文件(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

4

2 回答 2

2

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

你有 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

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

我不太了解,ggplot但如果问题是将这一切合二为一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() })

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

于 2013-12-05T14:52:59.687 回答
1

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

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

于 2013-12-16T08:39:31.300 回答