Сохранение вывода из вложенных циклов for в r

Я чувствую, что должен был найти/понять ответ на этот вопрос после частых поисков и большого количества чтения форума, но это все еще меня очень сбивает с толку. У меня есть два вложенных цикла for в r, и мне нужно сохранить вывод в переменную, но я точно не знаю, что назначить и где. Код работает так, как я хочу, просто я не могу найти, как получить вывод в той или иной форме. На вход циклов подается список подматриц. Вывод может быть либо в том же формате, но включать изменения, которые произошли в цикле, либо более идеальный формат будет включать все строки и столбцы в одну матрицу. Я попытался выполнить cbind, а также создать переменные вне циклов, чтобы сохранить все позже (вы, вероятно, заметите мои попытки закомментировать их), но, как я уже сказал, я все еще немного запутался. Любая помощь будет принята с благодарностью!

loop.List <- list()
#results.frame <- data.matrix()

ctr <- 0 # creating a counter and zeroing it


for (i in 1:length(subM.List))   { #Looping through each submatrix in the list
  loop.List[[i]] <- list()
  for (j in 2:nrow(subM.List[[i]])){ #Loop through each row of each submatrix in the list
  if ((subM.List[[i]][j, "LAT"] == -180) & #Imputation 1, imputing data points with 0 activity intensity
     (subM.List[[i]][j, "ACTIVITYIN"] ==  0)   & 
     !((subM.List[[i]][j-1, "ACTIVITYIN"]  >  0))[1]) {   #stop imputing at the first occurrence of a value > 0 in activity intensity
        imputeLat <- replace(subM.List[[i]][ ,"LAT"], subM.List[[i]][j,"LAT"], subM.List[[i]][j-1,"LAT"])
        imputeLon <- replace(subM.List[[i]][ ,"LON"], subM.List[[i]][j,"LON"], subM.List[[i]][j-1,"LON"])
        replace.col <- replace(subM.List[[i]][ ,"Impute"], subM.List[[i]][j,"Impute"], 1) #populated impute column. If point is imputed will have a 1
        allComb <- cbind(imputeLat, imputeLon, replace.col)
        ctr <- (ctr + 1)
    }
  }
  #result[[i]] <- allComb
#write.table(results.frame, "C:\\RWorkspace\\newMatrix.txt")
  #return(results.frame)
}

РЕДАКТИРОВАТЬ: образец данных одной из подматриц Список содержит несколько подматриц с разным количеством строк.

FixTYPE          ActivityIn    LAT     LON     Impute
 8                      0   32.81320 -117.2300
 8                      0   32.81324 -117.2301
 8                      1   32.81327 -117.2302
 8                      1   32.81326 -117.2301
 6                      0   32.81324 -117.2300
 6                      0   32.81338 -117.2302
 6                      0   32.81353 -117.2299
 7                      0   -180.000 -180.000
 7                      0   -180.000 -180.000
 7                      0   -180.000 -180.000
 7                      0   -180.000 -180.000
 7                      1   -180.000 -180.000
 7                      2   -180.000 -180.000
 7                      1   -180.000 -180.000
 1                      0   32.81315 -117.2300
 8                      0   32.81318 -117.2300

person Misc    schedule 17.06.2013    source источник
comment
Вероятно, все это можно было бы сделать с помощью lapply и apply, но без доступа к вашим данным (или минимального примера) трудно помочь конкретно   -  person alexwhan    schedule 18.06.2013
comment
Я бы рекомендовал вам написать функцию foo, которая принимает одну подматрицу в качестве входных данных и выводит allComb. Затем запустите lapply(subM.List, foo) или do.call(rbind, lapply(subM.List, foo)).   -  person flodel    schedule 18.06.2013


Ответы (1)


Подобно тому, как вы создаете переменную ctr за пределами вашего цикла for, если вы хотите сохранить результаты этих циклов, вы должны создать какую-то переменную хранения для вывода, который вы пытаетесь захватить. Если вы можете предоставить воспроизводимый пример, мы можем помочь вам больше.

Вот простой пример:

p=10
q=20
M=matrix(seq(1,p*q), p, q)

output=matrix(NA, p,q) # storage matrix
for(i in 1:p){
  for(j in 1:q){
    # do something
    output[i,j] = 2*i + j^2
  }  
}

Как заявляли другие, вполне вероятно, что то, что вы пытаетесь выполнить, будет упрощено с помощью функций apply.

person David Marx    schedule 17.06.2013
comment
Хорошо, спасибо @David Marx, кажется, я наконец понял. И да, мне нужно привыкнуть к функциям применения и меньше использовать циклы. - person Misc; 19.06.2013
comment
@David Marx, что, если я ввожу фрейм данных и хочу вывести его в виде фрейма данных с столбцами i и j? - person Polar Bear; 27.08.2016
comment
@PolarBear Это звучит как другой вопрос. Не могли бы вы опубликовать новую тему с этим вопросом и предоставить демо-ввод и то, как вы ожидаете, что результат будет выглядеть? Ссылка здесь и мы можем перенести это обсуждение туда. - person David Marx; 28.08.2016
comment
@DavidMarx Спасибо. Вот оно: stackoverflow.com/questions/39190052/ - person Polar Bear; 28.08.2016
comment
@PolarBear: этот вопрос был добровольно удален его автором. - person David Marx; 29.08.2016