为每次迭代创建一个包含新行的 data.frame

Creating a data.frame with a new row for each iteration

我正在尝试通过一个 ID 列表为 运行 创建一个脚本以应用于 API 调用,这样我就可以创建一个 data.frame 结果,其中每个为调用的每个 id 返回的结果是一行。

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

我的问题是它遍历每个 id,然后 returns 只遍历最后一个 (103) 的结果。很明显有一个非常基本的解决方案,但我错过了它。

你可以这样试试

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)

首先将结果放入向量中,然后创建数据框。

谢谢大家,两个建议都奏效了。

因为生成的 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))