我正在尝试构建一个应用程序,在其中我可以选择数据文件(输入$ dataset),然后添加新的日期时间列格式化日期和时间以前的列以使用ggplot2进行绘图。
我使用之前在批处理脚本和Rstudio中工作的“内部”。但现在我收到此错误消息:
没有适用于'within'的方法应用于类的对象 “反应性”
如何将此方法应用于反应对象?我应该使用另一个命令吗? cbind? 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()
}
那么,我应该如何向数据添加日期时间?也许创建datos2作为合并数据和日期时间的新反应源?
编辑2 已向github添加完整代码https://github.com/pacomet/git
答案 0 :(得分:2)
您无法直接更改数据文件 - 除非通过用户输入(在这种情况下选择数据文件),否则它无法更改。
你有2个选择(我知道):
1)创建一个包含重新格式化日期的新对象:
NewDate<-reactive({ as.POSIXct(paste(FECHA,H_SOLAR),
format = "%y/%m/%d %H:%M:%S")})
然后使用NewDate()
作为图表变量。
2)更改制作图表的函数中的日期格式。 e.g。
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()
中使用ggplot
- 我认为这应该能满足您的需求。
答案 1 :(得分:1)
我认为这个问题可以通过@dieter-menne对另一个关于对无效数据帧进行子集化的问题的答案来解决。重点是创建一个新的局部变量,类似于@ john-paul建议。