[问题类型]:
程式咨询(我想用R 做某件事情,但是我不知道要怎么用R 写出来)
[软件熟悉度]:
入门(写过其他程式,只是对语法不熟悉)
[问题叙述]:
各位大大好,小弟我想要将台湾多年的降雨观测资料去计算一些降雨指标,而我所用
的观测资料将台湾范围的经纬度切成60x81格,而我所要计算的降雨指标也需要一格一格
网格点去计算(无法所有网格点同时计算),因此必须写循环,但这个降雨指标在单一格网
格点上一年会算出一个值,所以我会再将多年的值求平均,以代表这个网格点长时间平均
的降雨指标值,之后再将每格网格点的值放入一个矩阵中,以利最后我能画图。下面是我所写的程式码,希望大大们能提供指点,谢谢,降雨观测资料可从这里取得
:http://0rz.tw/JI056。
[程式范例]:
library(ncdf4)
library(climdex.pcic)
#读档.变量
memory.limit(size=50000)
TCCIP_file <- "C:\\Users\\TOM\\Desktop\\R(数据库)\\TCCIP观测资料
\\Daily\\pr_day_tccip5kmV2_1960-2015.nc"
TCCIP_data <- nc_open(TCCIP_file)
print(TCCIP_data)
obs_lon <- ncvar_get(TCCIP_data,"lon")
obs_lat <- ncvar_get(TCCIP_data,"lat")
obs_time <- ncvar_get(TCCIP_data,"time")
obs_time <- seq(as.POSIXct("1960-01-01"), as.POSIXct("2015-12-31"), by="day")
obs_pr <- ncvar_get(TCCIP_data,"pr")
#obs_pr <- ncvar_get(TCCIP_data,"pr",start=c(25,25,1),count=c(1,1,20454))
dim(obs_pr)
#降雨指标之计算
#5.rnnmm(Annual count of days when PRCP>1mm)
obs_pr.dates <- as.PCICt(obs_time,cal="365_day",origin="1960-01-01")
rnnmm.mean <- matrix(NA_real_,nrow=60,ncol=81)
for(i in c(1:60)){
for(j in c(1:81)){
obs_pr <- ncvar_get(TCCIP_data,"pr",start=c(i,j,1),count=c(1,1,20454))
#把要计算降雨指标的资料和时间放入
obs <- climdexInput.raw(tmax = NULL, tmin = NULL,prec=obs_pr,tmax.dates = NULL
,tmin.dates = NULL, prec.dates=obs_pr.dates,base.range=c(1960,2015),northern.h
emisphere=TRUE)
#计算资料的降雨指标值
rnnmm <- climdex.rnnmm(obs)
#将多年的降雨指标值取平均
rnnmm.mean <- mean(rnnmm)
}
}
View(rnnmm.mean)
[环境叙述]:
[关键字]:
for循环 降雨指标 经纬度
作者:
andrew43 (讨厌有好心推文后删文者)
2019-01-24 17:02:00for loop中你用了j <- j + 1; i <- i + 1之类的应该错了for(i in 1:3)就是每一圈会自动让i+1啊,不必自己手动。最终目标rnnmm.mean应该也要是一个60*81的matrix,不是一个单一值。你目前只有单一值会被记录。应该要写成rnnmm.mean[i,j] <- mean(rnnmm)才行。climdexInput.raw()和climdex.rnnmm()怎么使用我不了解但看来climdexInput.raw()你也没有正确使用它,请看手册
作者:
andrew43 (讨厌有好心推文后删文者)
2019-01-26 21:13:00Error: object 'CI_output' not foundrnnmm.mean <- 改 rnnmm.mean[i,j] <- ,之前也有说过。mean(rnnmm)视情况可以改成mean(rnnmm, na.rm = T)看来算得很慢且都是NA,我没等到跑完就没耐心了。你试试如果有错,不要只重跑for的部分,要全部重跑
作者: Gjerry 2019-01-27 11:25:00
rnnmm.mean[I, j]是矩阵里面的一格你直接指定一个矩阵给他,所以发生错误