簡體   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