Вложено для цикла в R с функцией magic_for - PullRequest
0 голосов
/ 14 марта 2019

Список наборов данных, которые я использую: - 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()

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

...