2016-05-22 28 views
0

我已經創建了一個包含ID列表的數據框。R:循環爲每個API調用創建1個對象並自動將它們合併在一起

myIDs <- (c(45655,45656,45657,45658,45659)) 
myIDs <- as.data.frame(myIDs) 

而且我必須爲每個ID調用盡可能多的API查詢。我想創建一個循環這種方式:

apiP1 <- "http://api.mydomain.com/2.0/facts/" 
apiP2 <- "?Authorization=mytoken" 
for (i in myIDs$myIDs[1:5]){ 
    mydata <- fromJSON(file = paste0(apiP1,i,apiP2)) 
    } 

我想知道我應該採取哪種方式來獲取來自1個單一數據框中的API的所有行。我正在考慮爲每個請求創建1個對象,然後使用RBIND規則。

爲了做到這一點,我怎麼會自動創建這樣的對象:

mydata45655其中應包含來自API的數據與ID 45655

mydata45656它應該包含從數據ID爲45656 API

等等

+1

將下載保存到列表中:'myList < - list(); myList [[paste0(「dat」,i)]] < - fromJSON(file = paste0(apiP1,i,apiP2))''。這是在R中完成這些任務的最好方式,因爲它可以保持數據的組織。像'lapply'這樣的函數也有很好的功能,可以和列表一起工作。請參閱[本文](http://stackoverflow.com/questions/17499013/how-do-i-make-a-list-of-data-frames/24376207)進行更長時間的討論。 – lmo

回答

0

我絕對@ LMO的建議達成一致。以下是可能對您有幫助的代碼:

myIDs <- c(45655,45656,45657,45658,45659) 

apiP1 <- "http://api.mydomain.com/2.0/facts/" 
apiP2 <- "?Authorization=mytoken" 

for (i in myIDs){ 
    eval(parse(text = paste0('mydata',i,' <- fromJSON(file = paste0(apiP1,i,apiP2))'))) 
} 
相關問題