функция не выполняется в пользовательской функции в R - PullRequest
0 голосов
/ 02 мая 2019

При использовании spplot {sp} в R все работает нормально. Однако, когда я использую его в функции, spplot, кажется, ничего не делает, когда что-либо происходит.

Вот пример того, что я намерен сделать:

А) это работает:

#load packages
require(gplots)
require(sp)
require(profvis)

#create spatial polygon with categories-attribute
grd <- GridTopology(c(1,1), c(1,1), c(10,10))
polys <- as.SpatialPolygons.GridTopology(grd)

myAttribute <- c(rep("A",12), rep("B",59), rep("C",29))
df <- data.frame(myAttribute=myAttribute, row.names=row.names(polys))
polygons(df) <- polys

#plot polygons by attribute
spplot(df["myAttribute"], col.regions=c("green","yellow","blue"),oma=c(4,4,4,4))

enter image description here Б) это тоже работает:

test <- function (){
textplot("text to appear", halign="right", mar=c(4,4,4,4), col="black")
pause(1)
spplot(df["myAttribute"], col.regions=c("green","yellow","blue"),oma=c(4,4,4,4))
}
test()

enter image description here

C) однако, когда что-либо следует после spplot внутри функции, spplot пропускается. Сюжет должен появиться за 5 секунд до следующего графика. Однако сюжет вообще не нарисован.

test <- function (){
textplot("text to appear", halign="right", mar=c(4,4,4,4), col="black")
pause(1)
spplot(df["myAttribute"], col.regions=c("green","yellow","blue"),oma=c(4,4,4,4))
pause(5)
plot(df)
}
test()

enter image description here

Это известная проблема spplot? Есть ли какие-то исправления?

1 Ответ

0 голосов
/ 06 мая 2019

В этом случае моим окончательным решением было просто использовать print() в пользовательской функции:

test <- function (){
textplot("text to appear", halign="right", mar=c(4,4,4,4), col="black")
pause(1)
 print(spplot(df["myAttribute"], col.regions=c("green","yellow","blue"),oma=c(4,4,4,4)))
pause(5)
plot(df)
}
test()

При таком подходе сначала печаталось enter image description here

и - по назначению - через 5 секунд enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...