我有一个工作闪亮的应用程序,但我正在更改它,以便输入数据是反应性的 - 当底层数据更新时它会更新。当它刚刚读入数据时,它工作得很好,但现在数据是反应性的,我在其中一个文件上遇到了问题(另外两个文件按预期工作)。该文件是从数据库导出的 .csv,我想在使用之前做一些整理工作 - 更改一些名称并格式化一些数据。相关部分是:
server.r
W.Data<-reactiveFileReader(2000,session,
"WaterData.csv",read.csv,header=TRUE,as.is=TRUE)
这工作正常,但接下来的两行将不起作用:
names(W.Data())[names(W.Data())=="Visit_Start_Date"]<-"Visit.Date"
W.Data()$Visit.Date<-as.Date(W.Data()$Visit.Date,"%m/%d/%Y")
当我运行这个时我得到
Error in W.Data()$VisitDate <- as.Date(W.Data()$VisitDate, "%m/%d/%Y"):
invalid (NULL) left side of assignment
另一条线也类似。这里发生了什么?我可以用 a 来做这些事情吗data.frame
这是从读取的reactiveFileInput
?我尝试更改底层 .csv 文件中的名称以包含下划线而不是空格,并且我尝试将names()
and as.Date()
in reactive()
表达,但这些没有什么区别。
Thanks
我回答自己的问题主要是为了说我是个傻瓜。一旦使用读取文件reactiveFileReader()
它成为“反应源”。正如闪亮教程中所解释的here http://rstudio.github.io/shiny/tutorial/#reactivity-overview无功源是从外部修改的 - 用户输入新值,或者在本例中是文件的更新。您无法从内部修改它server.r
.
所以,对于我的情况,我使用了col.names
and colClasses
中的选项read.csv()
尽可能以最佳格式获取原始数据。我还使用了非常有用的setAs
函数得到read.csv
了解如何格式化日期,如下所述:指定 colClasses 参数的日期格式... https://stackoverflow.com/questions/13022299/specify-date-format-for-colclasses-argument-in-read-table-read-csv.
从那里开始,我需要从数据创建的任何新列都必须使用如下反应函数作为单独的对象来完成:
NewThing<-reactive({ function(MyReacitveCSVdata()$colname) })
进而NewThing()
反过来,您可以随心所欲地使用。这是解决诸如数字列中的字符值等问题的方法。如果您尝试将其引入使用colClasses="numeric"
你会得到一个错误并且read.csv()
将失败。相反,首先将列导入为“字符”,然后使用reactive({})
with as.numeric()
将其分配给一个新对象。请务必注意,新对象不能是data.frame
你引入了使用reactiveFileReader()
,相反,它必须是一个依赖于该对象的新对象data.frame
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)