我试图通过循环递归收集数据。我写了这个命令,它适用于从2页收集信息。例如,
library(jsonlite)
data1 <- fromJSON("https://www.example.com/?page=1", flatten = TRUE)
data2 <- fromJSON("https://www.example.com/?page=2", flatten = TRUE)
filings<- rbind.pages(list(data1, data2))
我想知道我是否可以递归执行此操作300页。让我知道任何建议。
library(jsonlite)
for (i in 1:300) {
datai <- fromJSON("https://www.example.com/?page=i", flatten = TRUE)
}
filings<- rbind.pages(list(data[1:300]))
答案 0 :(得分:0)
要在字符串中使用循环变量,您需要使用eval
,parse
和paste
这种令人不快的组合。这是一个简单的例子
for (i in 1:10){
eval(parse(text=paste(
'print ("iteration number ',i,'")'
,sep='')))
}
您的示例可能类似于
for (i in 1:300) {
eval(parse(text=paste(
'data_',i, '<- fromJSON("https://www.example.com/?page=',i,'", flatten = TRUE)'
,sep='')))
}
答案 1 :(得分:0)
循环将比apply
慢得多。请参阅lapply
,sapply
。
paste0
只是连接两个字符串。
GetJSON = function(id_)
{
return(fromJSON(paste0("https://www.example.com/?page=", id_), flatten = TRUE))
}
lapply(1:300, GetJSON)