Programatik olarak birçok veri kümesi alıyorum, bunların birçoğunda sayılarla başlayan ve bunlarda eksi işaretler gibi özel karakterler olan aptal isimler var. Veri kümelerinin hiçbiri özellikle büyük olmadığından ve veri türleri hakkında en iyi tahminde bulunma avantajını istedim, bu tabloları SQLite'ye dökmek için dplyr kullanıyorum.Dplyr ile köşeli parantezli tablo adları
Korkunç tablo adlarından kurtulmak için köşeli ayraç kullanıyorum, ancak bu işe yaramıyor.
data(iris)
foo.db <- src_sqlite("foo.sqlite3", create = TRUE)
copy_to(foo.db, df=iris, name="[14m3-n4m3]")
Bu hata iletisine neden olur: Örneğin: Ben mantıklı bir isim seçerseniz
Error in sqliteSendQuery(conn, statement, bind.data) : error in statement: no such table: 14m3-n4m3
Bu çalışır. Ancak, çeşitli nedenlerle, hantal isimleri tutmak istiyorum. Ayrıca sqlite doğrudan böyle bir kötü adlı tablo oluşturmak mümkün duyuyorum:
sqlite> create table [14m3-n4m3](foo,bar,baz);
sqlite> .tables
14m3-n4m3
çok derinden şeylerin içine çatlama olmadan, bu ben çözemiyorum bir şekilde köşeli parantez işleyen dplyr benziyor. Şüphelerim bu bir hata, ama bir şey kaçırmadığımdan emin olmak için ilk önce burada kontrol etmek istedim.
DÜZENLEME: Janky ismini doğrudan dplyr'ye ilettiğim durumdan bahsetmeyi unuttum. Bu hatalar aşağıdaki gibidir:
library(dplyr)
data(iris)
foo.db <- src_sqlite("foo.sqlite3", create = TRUE)
copy_to(foo.db, df=iris, name="14M3-N4M3")
Error in sqliteSendQuery(conn, statement, bind.data) :
error in statement: unrecognized token: "14M3"
Bu sadece bir tahmindir, ancak R'nin adlandırma kuralları nedeniyle olabilir. Bulduğum olası bir çözüm, 'name = gsub (" [.] "," ", Make.names (" [14m3-n4m3] "))' işlevini kullanmaktır. Bunu yaparsanız, orijinal isimlerinizi yine de copy_to() 'ye aktarabilirsiniz, ancak verilerde biraz farklı olabilirler. Bunun yardımcı olup olmadığından emin değilim ama benim iki sentim.Çok güzel bir soru. –
Bu, uygulama yolundan başladığımdan daha iyi bir çözümdür. Yavaşça kendimi iyi isimler + diğer güçlükler> kötü isimler fikrine konuşuyorum. – Peter
@RichardScriven ile aynı fikirdeyim - mevcut araçları kullanarak isimleri değiştirmek için daha iyi bir şey yapmaya çalışın! –