簡單的算術運算工作與小柵格預期,例如:在R中添加大型柵格時,@ data @值會發生什麼?
> r1 <- raster(ncol=5, nrow=5)
> r1[] <- rep(1, 5 * 5)
> class([email protected]@values)
[1] "numeric"
> class((r1 + r1)@[email protected])
[1] "numeric"
但是,當我用更大的柵格,奇怪的事情發生了:
> r1 <- raster(ncol=5000, nrow=5000)
> r1[] <- rep(1, 5000 * 5000)
> r2 <- r1 + r1
> class([email protected]@values)
[1] "logical"
爲什麼[email protected]@values
成爲logical
? 該所得目的是在隨後的計算中,不可用的 和一般它的行爲出現異常,例如:
> summary([email protected]@values)
Min. 1st Qu. Median Mean 3rd Qu. Max.
1 1 1 1 1 1
> summary([email protected]@values)
Mode NA's
logical 0
> object.size(r1)
200011576 bytes
> object.size(r2)
12112 bytes
基本上r2
看起來破碎。
作爲一種變通方法,加入@[email protected]
似乎很好地工作:
> r3 <- r1
> [email protected]@values <- [email protected]@values * 2
> class([email protected]@values)
[1] "numeric"
但你怎麼能解釋這種行爲,只有擁有較大的柵格發生什麼呢?
謝謝,但你如何解釋我的結果'摘要(r2 @ data @ values)'?我也不能做像'head()'這樣的事情,而其他訪問這些值的方法不起作用。 – janos
你需要做'head(r2 [],10)'。您需要使用'[]'來返回值。 「摘要」結果是因爲您正在爲磁盤上的每個值獲取邏輯。你*應該*做'摘要(r2)'。有關更多詳細信息,請參閱'?raster :: summary'。爲'柵格'對象寫明確的彙總方法。同樣,不要直接訪問插槽。作者不保證如何通過這些值來改變值,因此提供了訪問函數。始終使用這些。 –
這很聰明。不幸的是,如果我將這個對象保存到一個'.RData'文件並稍後加載它,它就不再工作了。看起來像存儲數據的臨時文件會丟失。有沒有辦法保存柵格,以便以後可以安全地加載它?或者有沒有辦法禁用臨時文件?在我的例子中,我的對象是200MB,不小,但在我的PC上,這不是問題。 – janos