2013-11-07 3 views
1

Я редактирую набор растровых (или матриц, если хотите), которые установлены в растровой таблице (список). Мне нужно изменить значение -999 на NA. До сих пор я нашел следующий код, который я бегу на каждом отдельном растре, чтобы быть наиболее эффективной памятиЗамена эффективной стоимости памяти в матрице/растрове

r[[15]][r[[15]]==-999]<-NA 

или

s=r[[15]] 
s[s==-999]<-NA 
gc(reset=T) 
r[[15]]=s 

Я замены значений над 20ish растров в список и около 10-15 У меня заканчивается память. Кто-нибудь знает более эффективный способ?

Cheers!

+0

Оказалось, что решение ниже работает? –

ответ

2

Вы можете использовать calc, который разработан, чтобы сделать это ...

calc(r , function(x) { x[ x == -999 ] <- NA; return(x) }) 

Это будет возвращать rasterStack (или что-то был вход). Из документов:

calc Для больших объектов calc вычислит значения кусок от куска. Это означает, что для результата fun не следует зависеть от того, имеет ли доступ к все значения сразу.

+0

Что такое дополнительный '[]' for? это нечто специфическое для пакета 'stack', или что-то еще; может превратить это в реальный вопрос, который вы хотите ... –

+0

@SamMason это пакет «растровый». Это просто помощник, чтобы получить фактические значения в 'rasterLayer', который возвращает вектор этих значений. Но я действительно передумал после некоторого дополнительного тестирования и думаю, что сейчас это не нужно, поэтому спасибо, что указали это! –

+0

Я вижу, что в пакете несколько документов. Не видел, что синтаксис требуется в другом месте, может быть, похмелье от программирования других языков? –

Смежные вопросы