R には、data.frame を生成する定期的なプロセスがあります。この data.frame を使用して、AngularJS でドロップダウン セレクターを作成したいと考えています。
私の最終的な data.frame は、多かれ少なかれ次のようになります (私の実際の例は、より深い階層構造を持つ可能性があります)。
DF<-data.frame(hie1=c(rep("Cl1",2),"Cl2"),hie2=c("Cl1op1","Cl1op2","Clop1"),
hie3=c("/first.html","/second.html","/third.html"))
その data.frame を次の構造の JSON に変換する必要があります。
{
"Cl1":{"Cl1op1":"/first.html","Cl1op2": "/second.html"},
"Cl2":{"Cl2op1":"/third.html"}
}
これまでのところ、列名の有無にかかわらず、data.frameのrjson
およびパッケージのすべての toJSON コマンドを試しました。RJSONIO
library(rjson)
#library(RJSONIO)
DF2<-DF
colnames(DF2)<-NULL
cat(toJSON(DF))
cat(toJSON(DF2))
reshape2
toJSON を使う前に の dcast 関数を使おうと思ったのですが、目的を達成するためにどのような構造が必要かわかりません。
rChartsの関数も使用しましtoJSON2
たが、成功しませんでした。toJSONArray
探している出力を取得するための R の適切な変換はありますか?
PS ({} の代わりに [] を使用してもかまいません)
編集:
ニーズを満たすために、いくつかの関数 (以下に含まれています) を作成しました。ただし、それらはあまりきれいではなく、R でこの変換を実行するためのより良い方法があるに違いないと私は信じています。
より良い解決策を期待して、この質問を開いたままにします。
linktwo<-function(V){
paste0(sapply(V,function(x) paste0("'",toString(x),"'")),collapse=":")
}
pastehier<-function(DF){
if(ncol(DF)==2){
return(paste0(apply(DF,1,linktwo),collapse=","))
}else{
u<-unique(DF[,1])
output=character()
for(i in u){
output<-append(output,paste0(paste0("'",i,"'"),":{",pastehier(DF[DF[,1]==i,-1]),
"}"))
}
return(paste0(output,collapse=","))
}
}
pastehier(DF)