在Shiny中格式化反应数据帧

Joh*_*aul 8 r shiny

我有一个工作闪亮的应用程序,但我正在更改它,以便输入数据是被动的 - 它将在基础数据更新时更新.它只是在读取数据时工作正常,但现在数据是被动的,我遇到了其中一个文件的问题(其他两个文件正如预期的那样工作).该文件是从数据库导出的.csv,我想在使用之前做一些内务处理 - 更改一些名称并格式化一些数据.相关部分是:

server.r

 W.Data<-reactiveFileReader(2000,session,
          "WaterData.csv",read.csv,header=TRUE,as.is=TRUE)
Run Code Online (Sandbox Code Playgroud)

这工作正常,但接下来的两行不起作用:

names(W.Data())[names(W.Data())=="Visit_Start_Date"]<-"Visit.Date" 
W.Data()$Visit.Date<-as.Date(W.Data()$Visit.Date,"%m/%d/%Y")   
Run Code Online (Sandbox Code Playgroud)

当我跑这个我得到

Error in W.Data()$VisitDate <- as.Date(W.Data()$VisitDate, "%m/%d/%Y"):
invalid (NULL) left side of assignment
Run Code Online (Sandbox Code Playgroud)

和另一条线相似.这里发生了什么?我能做到这样的一个东西data.frame是从读reactiveFileInput?我尝试将基础.csv文件中的名称更改为下划线而不是空格,我尝试将names()and和as.Date()in reactive()表达式放在一起,但这些没有区别.

谢谢

Joh*_*aul 14

我回答我自己的问题主要是说我是一个nincompoop.一旦使用reactiveFileReader()它读入文件,它就变成了"反应源".正如在这里的闪亮教程中所解释的,反应源是从外部修改的 - 用户输入新值,或者在这种情况下,是文件的更新.你不能从里面修改它server.r.

因此,对于我的情况,我使用col.namescolClasses选项read.csv()以最佳格式获取原始数据.我还利用了非常有用的setAs功能,以获得read.csv理解如何格式化日期,如下解释:指定colClasses参数日期格式....

从那里,我需要从数据创建的任何新列必须使用这样的反应函数作为单独的对象完成:

NewThing<-reactive({ function(MyReacitveCSVdata()$colname) })
Run Code Online (Sandbox Code Playgroud)

然后NewThing() 可以按照您的意愿使用.这是您可以解决其他数字列中的字符值等问题.如果你试图将它带入使用,colClasses="numeric"你将收到一个错误,并且read.csv()会失败.而是首先将列导入为"character",然后使用reactive({})with as.numeric()将其分配给新对象.请务必注意,新对象不能是data.frame您使用的新列reactiveFileReader(),而是必须是依赖于该对象的新对象data.frame.