繁体   English   中英

使用嵌套的for循环和外部计数器在R中遇到麻烦

[英]Having trouble with in R with nested for loops and an external counter

我是一位具有Python和C ++经验的R新手,试图在这些语言中做对我来说有意义的事情,但是显然在R中不起作用。我有一个带有嵌套对象的JSON数组,我需要提取数据从,但我需要将它们同步到单独的数组中以制作新的数据框,以便可以绘制数据。

我的数据如下所示: {URL:[data], ... {VisitHistory:{0:[number], 1:[number]}}}

我试图将其放入表格格式,在VisitHistory数组中,每个条目对应一行,但是这些行中的每一个都有相同的URL。

这是我到目前为止的内容:

url<-c()
views<-c()
date<-c()
iter<-1

#bring in data
output<-fromJSON(file='filename')

#generate lists for each variable of interest
for(n in 1:length(output)) {
  for(x in 1:length(output[[n]]$th)) {
    url[iter]<-c(output[[n]]$url)
    if(!is.null(output[[n]]$th[[x]]$sh[[1]])) {

      views[iter]<-c(output[[n]]$th[[x]]$sh[[1]])
    }
    else {
      views[iter]<-c(-1)
    }
    date[iter]<-c(output[[n]]$th[[x]]$ts[[1]])

    iter<-iter+1
  }
  iter<-iter+1
}

我正在尝试使用iter来确保urlviewsdate都在各自的向量中保持同步,直到将它们合并到自己的数据帧中为止。 但是,尝试使用iter变量作为索引在该块中进行赋值会使循环无限进行,我不知道为什么。

我感谢您的帮助!

您是否尝试过在循环内打印iter变量,以查看它是否实际经历了迭代或暂停了某些事情? 也许您的文件很大。 我没有提供解决方案,只是一种可以帮助您调试此问题的方法。

另外,您正在for循环内为变量动态分配内存,这会使事情变慢。 尝试在开始时为变量分配固定大小的matrixsequenceseqrep ),并在iter变量耗尽其大小时中断循环。 如果这样可行,那么您就知道时间就是问题。 例如

# Avoid dynamic allocation, which is slow
# by preallocating memory.
url<-rep(0, 10)
views<-rep(0, 10)
date<-rep(0, 10)
iter<-1

#bring in data
output<-fromJSON(file='filename')

#generate lists for each variable of interest
for(n in 1:length(output)) {
  for(x in 1:length(output[[n]]$th)) {
    print(iter) # print the progression
    url[iter]<-c(output[[n]]$url)
    if(!is.null(output[[n]]$th[[x]]$sh[[1]])) {

      views[iter]<-c(output[[n]]$th[[x]]$sh[[1]])
    }
    else {
      views[iter]<-c(-1)
    }
    date[iter]<-c(output[[n]]$th[[x]]$ts[[1]])

    iter<-iter+1
    if(iter > 10) break
  }
  iter<-iter+1
  if(iter > 10) break
}

您可能还需要考虑使用plyr包为所需的功能定义一个函数,并将其应用于您拥有的列表。 但是首先尝试我在上面添加的内容,看看是否可行。 另外,要查找预分配的最大迭代次数,可以执行以下操作:

maxiter <- 0
for(i in 1:length(output)){
  maxiter <- maxiter + length(output[[i]]$th)
}

另外,为什么要在外部循环中增加iter变量? 您只需要在最里面的循环中增加它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM