2016-07-12 3 views
1

Я хочу написать цикл, который извлекает таблицу из трехмерного массива и последовательно записывает ее в кадр данных в виде столбца.Объединение для вывода цикла

код у меня до сих пор

library(ncdf4) 

test <- nc_open("NorESM_TREFHT_cont_mem1-60_2006-2099.nc") 
temp <- ncvar_get(test, "TREFHT", count = c(144,96,60,1)) 
drop(temp) 
lat<- ncvar_get(test, "lat") 
lon <- ncvar_get(test,"lon") 
lonlat <- expand.grid(lon, lat) 
for (n in 1:60) { 
member <- array(temp[1:144,1:96,n]) 
ensemble <- as.vector(member) 
h <- data.frame(cbind(lonlat, ensemble[n])) 
} 

В настоящее время код работает без цикла (при п = 1,2 и т.д.) но только сочетает в себе последний прогон в течение цикла вывода при п = 1:60

+0

У меня есть функции, которые не являются примитивными для Р. Можете ли вы рассказать нам о пакете, откуда они пришли? –

+0

Я работаю с файлами netCDF4 с помощью пакета ** ncdf4 ** – Dylan

+1

Можете ли вы также создать пример того, как будет выглядеть тест? Я не могу воссоздать вашу проблему, потому что у меня нет доступа к этому файлу .nc. –

ответ

1

Ваш h еще не используется; другими словами, бесполезно. Вероятно, вы хотите добавить на каждом этапе n переменную ensemble на ваши данные lonlat. Таким образом, ваш код должен быть lonlat <- data.frame(cbind(lonlat, ensemble[n])).

+0

Это решение работает отлично. Мне было интересно, если бы вы могли расшириться на h, будучи бесполезным. Я новый пользователь r, и я не полностью понимаю некоторую динамику объектов в r. – Dylan

+1

@ Dylan каждый раз, когда выполняется цикл 'for loop', он« переназначает »объект' h'. Поэтому он «пишет» над собой, поэтому почему вы остаетесь с последним выходом 'n = 60' – amwill04

Смежные вопросы