回复 第1楼 的 nph:
其实我也不大会,不过看到你图上的NDVI⋯⋯
楼主是搞植被遥感的吧?
如果是先握个手,我最近也在研究如何分析植被指数时间序列数据。
你的不同序列代表不同的点?
然后每个点有多年的数据?
时间分辨率都一样么?(如果用MODIS的话应该是十六天吧?)
一个方法是,把这些时间序列组合成3-D array,然后就可以用apply了
就用手头的数据举个例子:
<br />
## 譬如我有9个点的时间序列,简略期间,每个点的数据都一样<br />
## 每个点都是一个长度为28的时间序列<br />
evi.ts1 <- c(0.1472, 0.1479, 0.1411, 0.1547, 0.1670, 0.1532, 0.1430, 0.1413, 0.1373, 0.1517,<br />
0.1629, 0.1694, 0.1939, 0.2576, 0.2270, 0.2244, 0.2091, 0.1982, 0.1896,<br />
0.1749, 0.1665, 0.1584, 0.1587, 0.1465, 0.1508, 0.1378, 0.1119, 0.1142)<br />
evi.ts2 <- evi.ts1<br />
evi.ts3 <- evi.ts1<br />
evi.ts4 <- evi.ts1<br />
evi.ts5 <- evi.ts1<br />
evi.ts6 <- evi.ts1<br />
evi.ts7 <- evi.ts1<br />
evi.ts8 <- evi.ts1<br />
evi.ts9 <- evi.ts1</p>
<p>## 创建一个空的3D array, 九行一列二十八层<br />
arr.evi <- array(numeric(0), c(9, 1, 28))</p>
<p>## 把单独的时间序列填充到空的array中<br />
for (i in 1:9) {<br />
arr.evi[i,1, ] <- get(paste('evi.ts', i, sep = ''))<br />
}</p>
<p>## 然后就可以用apply命令了<br />
apply(arr.evi, c(1, 2), sd)</p>
<p>## 返回的结果和arr.evi的维度一样<br />
</p>
想提高apply的计算效率的话,可以考虑一下并行计算
snowfall包里边有个sfapply()命令,是apply()的并行版,用起来很简单,而且效率提升很明显