Вложенный цикл for в R с функцией magic_for

#r #nested-loops

#r #вложенные циклы

Вопрос:

Список наборов данных, которые я использую:- 1. файлы климатических данных .nc 2. Список городов (53) с широтой и долготой для извлечения данных из файла .nc 3. Рабочий код:- Мне удалось получить данные для 53 городов с помощью цикла magic_for.Итак, в настоящее время я могу сохранить путь к файлу .nc и извлекать ежедневные значения таких переменных, как tasmin, tasmax, pr и tas, с помощью функции magic_for. Каждый из этих файлов содержит данные за период с 2006 по 2100 год для одной переменной. 4. Проблема: — Теперь для модели, в которой у меня есть 19 файлов .nc (по 5 лет каждому), в отличие от предыдущего 1 файла (95 лет). Следовательно, я хочу использовать рабочую программу, как упомянуто выше, для запуска девятнадцать раз. 5. Код:- Работает:

 tasfilepath<-paste0("path.nc")
model1<-nc_open(tasfilepath)
lonmodel1<-ncvar_get(model1, varid = 'lon')
latmodel1<-ncvar_get(model1, varid = 'lat')
timemodel1<-nc.get.time.series(model1, v="tasmin", time.dim.name = "time")
input<-read.xlsx(file = "cities_1.xlsx", sheetName = "Sheet1")
i<-length(col(input[1]))
magic_for(print1, silent = TRUE)
for (j in 1:i)
{
  alat<-which.min(abs(latmodel1-input[j,2]))
  alon<-which.min(abs(lonmodel1-input[j,3]))
  temp<-nc.get.var.subset.by.axes(model1, "tasmin", axis.indices = list(X=alon, Y=alat))
print1(temp) 
}
df0<-magic_result_as_dataframe()
  

Не работает:

 input0<-read.xlsx(file = "sheet with path addresses of .nc files.xlsx")
    i0<-length(col(input0[1]))
    magic_for(print2, silent = TRUE)
    for(k in 1:i0)
    {
        tasfilepath<-paste0(input0[k,2])
        model1<-nc_open(tasfilepath)
        lonmodel1<-ncvar_get(model1, varid = 'lon')
        latmodel1<-ncvar_get(model1, varid = 'lat')
        timemodel1<-nc.get.time.series(model1, v="tasmin", time.dim.name = "time")
        input<-read.xlsx(file = "cities_1.xlsx", sheetName = "Sheet1")
        i<-length(col(input[1]))
        magic_for(print1, silent = TRUE)
        for (j in 1:i)
          {
            alat<-which.min(abs(latmodel1-input[j,2]))
            alon<-which.min(abs(lonmodel1-input[j,3]))
            temp<-nc.get.var.subset.by.axes(model1, "tasmin", axis.indices = list(X=alon, Y=alat))
            print1(temp)
        }
        df0<-magic_result_as_dataframe()
        print2(df0)
    }
    df1<-magic_result_as_dataframe()
  

Ошибка — Ошибка в (function (…, row.names = NULL, проверьте.строки = FALSE, check.names = TRUE, : аргументы подразумевают разное количество строк: 53, 19
Альтернативы:
Даже если бы я мог создать 19 фреймов данных и связать их вместе, моя проблема была бы решена.
С уважением

Комментарии:

1. Это слишком много для обработки в течение 8:22. Вы пробовали добавлять browser() вызов перед строкой с подозрением на нарушение и проверять результат?

2. Привет, Роман, я не пользовался браузером (). Не могли бы вы поделиться ссылкой или объяснить подробнее. В любом случае я читаю документацию r по нему.

3. Существует множество ресурсов для изучения отладки в R. Вот один из них: adv-r.hadley.nz/debugging.html#browser