2015-09-22 2 views
1

Я пытаюсь сделать скрипт для запуска через список идентификаторов для применения к вызову API, чтобы я мог создать data.frame результатов, где каждый результат, возвращаемый для каждого идентификатора, называемого строкой.Создание data.frame с новой строкой для каждой итерации

library(jsonlite) 
ids <- c("101","102","103") 
baseURL <- "http://api.example.com/query_json.ashx?m=Details&Id=" 
for (i in ids) { details <- lapply((paste(baseURL,i, sep="")), fromJSON) } 

Моя проблема в том, что она выполняет итерацию через каждый идентификатор, но затем возвращает только результат из последнего (103). Очевидно, что есть довольно базовое решение, но я этого не понимаю.

+2

Вы продолжаете переписывать 'details'. Вы могли бы заменить forloop лапкой или чем-то подобным. – Heroka

+1

вы можете попробовать: 'lapply (ids, function (id) fromJSON (paste (baseURL, id, sep =" ")))' –

ответ

0

Спасибо всем, оба предложения работали.

Поскольку результирующий список fromJSON R был вложен, мне нужно было еще больше адаптировать мой код, чтобы конечный кадр данных был правильно структурирован.

library(jsonlite) 
ids <- c("101","102","103") 
nids <- length(ids) 
baseURL <- "http://api.example.com/query_json.ashx?m=Details&Id=" 

details <- c() 
for (i in ids) { 
    details <- lapply(ids, function(id) fromJSON(paste(baseURL,id, sep=""))) 
} 

details <- data.frame(matrix(unlist(details), nrow=nids, byrow=T)) 
1

Вы можете попробовать н как тот

ids <- c("101","102","103") 
baseURL <- "http://api.example.com/query_json.ashx?m=Details&Id=" 
details <- c() 
for (i in ids) { 
    details[i] <- lapply((paste(baseURL,i, sep="")), fromJSON) 
} 
df <- data.frame(details, stringsAsFactors=FALSE) 

Сначала вы положили результаты в вектор, а затем создать фрейм данных.

+0

Спасибо всем, что изменил мой код таким образом. – jmk

Смежные вопросы