我试图从一系列.nc文件中提取海面温度数据。 所以我有一个包含30个下载的.nc文件的文件夹,所有文件都写成" 1981.nc"," 1982.nc"等等。
但是,不是将它们全部单独加载,而是想要遍历每个文件并计算每个文件的平均温度,以便最后得到30个温度值。
问题是日期参数必须为每个文件更改。我想在文件中包含类似years<-substr(filenames, 1,4)
的内容,这些文件提取了年份的价值,但它不起作用。
我正在考虑以下几点:
library(ncdf4)
setwd("C:\\Users\\Desktop\\sst")
source("C:\\Users\\Desktop\\NOAA_OISST_ncdf4.R")
out.file<-""
filenames <- dir(pattern =".nc")
years<-substr(filenames, 1,4)
lst <- vector("list", length(filenames ))
for (i in 1:length(filenames)) {
ssts = extractOISSTdaily(filenames[i], "C:\\Users\\Desktop\\lsmask.oisst.v2.nc",
lonW=350,lonE=351,latS=52,latN=56,date1='years[i]-11-23', date2='years[i]-12-31')
mean(ssts)
}
此处描述了进行提取的extractOISSTdaily
函数:http://lukemiller.org/index.php/2014/11/extracting-noaa-sea-surface-temperatures-with-ncdf4/
.nc文件位于:https://www.esrl.noaa.gov/psd/data/gridded/data.noaa.oisst.v2.highres.html#detail
答案 0 :(得分:1)
这有用吗?
# Get filenames
filenames <- dir(pattern =".nc")
# Mean SSTs
m.ssts <- NULL
# Loop through filenames
for (i in filenames) {
# Get year (assuming form of filename is, e.g., 1981.nc)
year <- sub(".nc", "", i)
# Do whatever this function does
ssts <- extractOISSTdaily(i, "C:\\Users\\Desktop\\lsmask.oisst.v2.nc",
lonW=350, lonE=351, latS=52, latN=56,
date1=paste(year, "-11-23", sep = ""),
date2=paste(year, "-12-31", sep = ""))
# Profit!
m.ssts <- c(m.ssts, mean(ssts))
}
代码的工作原理是首先收集当前目录中扩展名为.nc
的所有文件名,并创建一个空对象来存储平均SST。 for循环通过文件名依次剥离文件扩展名以获取年份(即1981.nc
变为1981
),代替.nc
替换空字符串。接下来,指定间隔的netCDF数据放在ssts
中。通过将当前年份与所需的月份和日期粘贴在一起来创建间隔。最后,计算均值并将其附加到m.ssts
对象。如下面的OP所述,实际上应该读取m.ssts <- c(m.ssts, mean(ssts, na.rm = TRUE))
以允许数据中的NA
。