fork(4) download
  1. # 各輸入檔案乃採用原發問者上傳之 csv 和 nc 檔
  2.  
  3. library(magrittr)
  4. library(data.table)
  5. library(ncdf4)
  6.  
  7. # 各種讀資料
  8. analog.indices <-
  9. fread("HIRAM_WRF_analog.indices(1979-2005).csv",
  10. col.names = c("day", "i1", "i2"))
  11. analog.weights <-
  12. fread("HIRAM_WRF_weights(1979-2005).csv",
  13. col.names = c("day", "w1", "w2"))
  14. HIRAM_WRF_data <- nc_open("197901-200512_pr_axis_time_domain.nc")
  15. hiram_wrf_lon <- ncvar_get(HIRAM_WRF_data, "lon")
  16. hiram_wrf_lat <- ncvar_get(HIRAM_WRF_data, "lat")
  17. hiram_wrf_time <- ncvar_get(HIRAM_WRF_data, "time")
  18. hiram_wrf_pr <- ncvar_get(HIRAM_WRF_data, "pr")
  19.  
  20. # 創新的三維 array
  21. pr.new <-
  22. array(
  23. NA_real_,
  24. dim = c(dim(hiram_wrf_pr)[1:2], nrow(analog.indices)),
  25. # 填上合適的 dimnames(尚無實際作用)
  26. dimnames = list(
  27. hiram_wrf_lon %>% sprintf("%1.2f", .),
  28. hiram_wrf_lat %>% sprintf("%1.2f", .),
  29. 1:nrow(analog.indices)
  30. )
  31. )
  32. dim(pr.new) #[1] 41 77 10227
  33.  
  34. # analog.indices 逐列處理(1:10227)
  35. # 每一圈會為 pr.new 填上一層資料,共 10227 層
  36. for (i in 1:nrow(analog.indices)) {
  37. pr.new[, , i] <-
  38. hiram_wrf_pr[, , analog.indices$i1[i]] * analog.weights$w1[i] +
  39. hiram_wrf_pr[, , analog.indices$i2[i]] * analog.weights$w2[i]
  40. }
  41.  
  42. # 檢查 pr.new[1,1,11]
  43. analog.indices[11,]
  44. # day i1 i2
  45. # 1: 10 11 11
  46. analog.weights[11,]
  47. # day w1 w2
  48. # 1: 11 0.2276517 0.762284
  49. print(hiram_wrf_pr[1, 1, 10] * 0.2276517 + hiram_wrf_pr[1, 1, 11] * 0.762284) # 0.007988894
  50. print(pr.new[1, 1, 11]) # 0.007988894
  51.  
Success #stdin #stdout #stderr 0.26s 188800KB
stdin
Standard input is empty
stdout
Standard output is empty
stderr
Error in library(ncdf4) : there is no package called ‘ncdf4’
Execution halted