【问题标题】:Formatting reactive data.frames in Shiny在 Shiny 中格式化响应式 data.frames
【发布时间】:2013-12-10 15:37:45
【问题描述】:

我有一个正常工作的闪亮应用程序,但我正在更改它,以便输入数据是反应性的 - 它会在基础数据更新时更新。刚读入数据时它工作得很好,但现在数据是反应性的,我遇到了其中一个文件的问题(另外两个文件按预期工作)。该文件是从数据库导出的 .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

和另一行类似。这里发生了什么?我可以用从reactiveFileInput 读取的data.frame 做这些事情吗?我尝试将基础 .csv 文件中的名称更改为下划线而不是空格,并尝试将 names()as.Date() 放入 reactive() 表达式中,但这些没有任何区别。

谢谢

【问题讨论】:

    标签: r shiny


    【解决方案1】:

    我在回答我自己的问题时主要是说我是一个 nincompoop。一旦使用reactiveFileReader() 读入文件,它就会成为“反应源”。正如闪亮教程here 中所解释的,反应源是从外部修改的——用户输入一个新值,或者在这种情况下是文件的更新。您不能从 server.r 内部修改它。

    因此,就我而言,我在read.csv() 中使用了col.namescolClasses 选项,以尽可能以最佳格式获取原始数据。我还利用了非常有用的setAs 函数让read.csv 了解如何格式化日期,如下所述:Specify date format for colClasses argument ...

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

    NewThing<-reactive({ function(MyReacitveCSVdata()$colname) })
    

    然后可以随意使用NewThing()。这是您可以解决其他数字列中的字符值等问题的方法。如果您尝试使用 colClasses="numeric" 将其引入,您将收到错误并且 read.csv() 将失败。相反,首先将列导入为“字符”,然后使用 reactive({})as.numeric() 将其分配给新对象。请务必注意,新对象不能是您使用reactiveFileReader() 引入的data.frame 中的新列,而必须是依赖于该data.frame 的新对象。

    【讨论】:

    • @约翰·保罗。看来我和你在这篇文章中遇到的类似问题。但是,根据您的见解,我无法真正解决我的问题。任何想法如何解决我的问题。在问题的链接下方。谢谢。 stackoverflow.com/questions/37736782/…
    • @约翰·保罗。我也面临这个问题,需要帮助来解决这个问题。谢谢你。我的目标是更改最后一列。我尝试了几件事。 .stackoverflow.com/questions/54467692/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-23
    • 2014-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多