Parlak

2013-11-25 20 views
8

'da reaktif data.frames biçimlendirme Çalıştığım parlak bir uygulama var, ancak giriş verileri reaktif olacak şekilde değiştiriyorum - temel veri güncellendiğinde güncellenir. Verilerde sadece okuduğunda iyi çalıştı, ancak şimdi veriler reaktif oldu Ben dosyalardan biri ile ilgili sorun yaşıyorum (diğer ikisi beklendiği gibi çalışır). Dosya bir veritabanından dışa aktarılan bir .csv'dir ve kullanmadan önce biraz temizlik yapmak istiyorum - bazı isimleri değiştirmek ve bazı verileri biçimlendirmek istiyorum. İlgili parçasıdır: Bu iyi çalışır, ancakParlak

server.r 

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

sonraki iki satır çalışmaz:

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

ben bu çalıştırdığınızda ben

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

ve benzeri olsun diğer çizgi. Burada neler oluyor? reactiveFileInput'dan okunan data.frame ile bu tür şeyleri yapabilir miyim? Alanlardan ziyade altçaplara sahip olmak için alttaki .csv dosyasındaki adları değiştirmeyi denedim ve names() ve as.Date()'u reactive()10 ifadelerine koymaya çalıştım, ancak bunlar hiçbir fark yaratmadı.

Teşekkür

cevap

13

Ben büyük ölçüde ben bir sersem ediliyordu söylemek benim kendi soruya yanıt ediyorum. Dosya reactiveFileReader()'u kullanarak okunduğunda "reaktif bir kaynak" haline gelir. Parlak öğretici here'da açıklandığı gibi, reaktif kaynaklar dışarıdan değiştirilir - kullanıcı yeni bir değer girdiğinde veya bu durumda, dosyanın bir güncellemesi. server.r'un içinden değiştiremezsiniz.

Bu yüzden, benim durumum için read.csv() numaralı telefondan col.names ve colClasses seçeneklerini kullandım ve orijinal verileri olabildiğince en iyi biçimde aldım. Specify date format for colClasses argument ...: Burada açıklandığı şekilde tarihin nasıl biçimlendirileceğini anlamak için read.csv almak için çok yararlı setAs işlevini de kullandım.

Oradan ben verilerden oluşturmak için gerekli her türlü yeni sütunlar böyle bir reaktif fonksiyonunu kullanarak ayrı bir nesne olarak yapılması gerekiyordu:

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

Ve sırayla ardından NewThing() sen ancak kullanılabilir diliyorum. Aksi halde sayısal bir sütunda karakter değerleri gibi sorunları nasıl ele alabilirsiniz. Sadece colClasses="numeric"'u kullanarak getirmeye çalışırsanız bir hata alırsınız ve read.csv() başarısız olur. Bunun yerine, önce sütunu "karakter" olarak içe aktarın ve daha sonra as.numeric() ile reactive({})'u yeni bir nesneye atamak için kullanın. Yeni nesnenin,kullanarak getirdiğiniz data.frame'daki yeni bir sütun olamayacağına dikkat edin; bunun yerine, data.frame'a bağlı yeni bir nesne olması gerekir.

+0

@ John Paul. Görünüşe göre bu yazıya benzer bir sorunum var. Ancak, sorunumu içgörülerinize göre gerçekten düzeltemedim. Sorunumu nasıl düzeltebileceğime dair bir fikrim var. Sorunun altındaki link. Teşekkürler. http://stackoverflow.com/questions/37736782/add-new-variable-column-in-the-fly-to-a-reactive-dataframe-in-shiny?noredirect=1#comment63045945_37736782 – SimonB