2016-03-23 82 views
1

我試圖在自動化R A JSON解析(我不得不刪除了「https://開頭從網址,因爲我沒有足夠的信譽分):評估和演示解析的JSON

library(Quandl) 
library(jsonlite) 

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

。在page=X各種號碼上面的代碼片斷正確執行對於我試圖使用eval(parse())但我做錯了什麼所以,我有以下幾點:

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) 

但是當我嘗試執行:

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

其中n<-2或任何其他整數然後控制檯凍結,出現以下錯誤消息話題:

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

我在做什麼錯在這裏?

+0

順便說一句,我試圖同時使用「」和「」圍繞文本1和文本字符串,但是這並沒有幫助。 – apostolos1975

+0

'cat'不會返回任何東西,我想你應該使用'paste0'來代替。請參閱[這個答案](http://stackoverflow.com/a/12775193/5977215) – SymbolixAU

+0

爲什麼使用'eval(parse())'? – Parfait

回答

0

the difference between paste and cat

cat讀只會打印到屏幕上,它不會返回任何東西。要創建一個字符串,您應該使用pastepaste0

例如,考慮

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

即使運行concat <- cat(text1, n, text2)時,它打印輸出到控制檯,concat是空/空

解決方案是使用paste0創建的字符串表達式

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)))) 

此外,你不要需要使用eval,您可以使用paste0直接

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

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