2016-03-23 9 views
1

Ich versuche, eine JSON Parsen in R zu automatisieren (ich hatte die „https zu entfernen: // aus den URLs, weil ich nicht genug Rufpunkte haben leider):Eval parsen für eine JSON

library(Quandl) 
library(jsonlite) 

tmp <- 
fromJSON("www.quandl.com/api/v3/datasets.json?database_code=WIKI&page=2",flatten = TRUE) 

.. für verschiedene Zahlen in page=X der obige Code-snippet richtig ausführt Dafür versuche ich eval(parse()) zu verwenden, aber ich bin etwas falsch zu machen Also habe ich folgendes:.

text1 <- 'fromJSON("www.quandl.com/api/v3/datasets.json?database_code=WIKI&page=' 
text2 <- '",flatten = TRUE)' 
and to verify that I create the string properly: 
> text1 
[1] "fromJSON(\www.quandl.com/api/v3/datasets.json?database_code=WIKI&page=" 
> text2 
[1] "\",flatten = TRUE)" 
> cat(text1,n,text2,sep="") 
fromJSON("www.quandl.com/api/v3/datasets.json?database_code=WIKI&page=2",flatten = TRUE) 

aber wenn ich versuche, auszuführen:

koko <- eval(parse(text = cat(text1,n,text2,sep=""))) 

wo n<-2 oder jede andere ganze Zahl dann die Konsole friert mit dem folgenden Fehler messsage:

? 
Error in parse(text = cat(text1, n, text2, sep = "")) : 
    <stdin>:1:4: unexpected '{' 
1: D_{ 
    ^

Was mache ich falsch hier?

+0

BTW verwenden können, habe ich versucht, „zu verwenden, um sowohl“ und ‚‘ um die text1 und text2 Saiten aber nicht helfen. – apostolos1975

+0

'cat' wird nichts zurückgeben, ich denke du solltest stattdessen' paste0' verwenden. Siehe [diese Antwort] (http://stackoverflow.com/a/12775193/5977215) – SymbolixAU

+0

Warum verwenden Sie 'eval (parse())'? – Parfait

Antwort

0

Haben Sie einen Lese von the difference between paste and cat

cat wird nur auf dem Bildschirm drucken, es wird nichts zurück. Um eine Zeichenfolge zu erstellen, sollten Sie paste oder paste0 verwenden.

Zum Beispiel

concat <- cat(text1, n, text2) 
p <- paste0(text1, n, text2) 

auch berücksichtigen, wenn concat <- cat(text1, n, text2) läuft, druckt er die Ausgabe an die Konsole und concat ist leer/NULL

Die Lösung ist paste0 zu verwenden, um die Zeichenfolge zu erstellen Ausdruck

text1 <- 'fromJSON("http://www.quandl.com/api/v3/datasets.json?database_code=WIKI&page=' 
text2 <- '",flatten = TRUE)' 
n <- 2 
koko <- eval(parse(text = (paste0(text1, n, text2)))) 

Auch Sie nicht müsseneval zu verwenden, Sie paste0 direkt

text1 <- 'http://www.quandl.com/api/v3/datasets.json?database_code=WIKI&page=' 
n <- 2 

koko <- fromJSON(paste0(text1, n), flatten=TRUE)