Применить boot :: inv.logit () к растру в R - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть Formal Class Raster, и я пытаюсь применить функцию boot :: inv.logit () к своим растровым ячейкам, например:

r1 <- raster(nrows=25, ncols=25, vals=rtnorm(n = 625, .1, .9))
r2 <- boot::inv.logit(r1)

Однако, когда я пытаюсь это сделать, он перезапускает ошибку:

> Error in plogis(x) : Non-numeric argument to mathematical function

Если я превращаю растр в матрицу, а затем возвращаюсь к растру, он выполняет свою работу, но я теряю всю остальную информацию, связанную с «формальным растром класса», который у меня был в начале, что не идеально:

r2 <- boot::inv.logit(as.matrix(r1))
r2 <- as.raster(r2)

Существует ли простой способ восстановить информацию Formal Class Raster, которая была у меня ранее, или применить inv.logit() к растру без преобразования as.matrix()? Заранее спасибо.

1 Ответ

0 голосов
/ 18 сентября 2018

Если вы хотите применить функцию к растру, используйте метод calc из raster:

r2 <- calc(r1,boot::inv.logit)

> r2 

# class       : RasterLayer 
# dimensions  : 25, 25, 625  (nrow, ncol, ncell)
# resolution  : 14.4, 7.2  (x, y)
# extent      : -180, 180, -90, 90  (xmin, xmax, ymin, ymax)
# coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 
# data source : in memory
# names       : layer 
# values      : 0.07434905, 0.9498965  (min, max)

В качестве альтернативы, вы можете сделать пустую копию r1 и просто ввести значения, полученные из inv.logit:

r2 <- raster(r1)
r2[] <- boot::inv.logit(as.matrix(r1))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...