2017-07-05 172 views
0

我不知道如何爲包含magrittr管(%>%)的東西編寫包裝函數。我試圖創建一個包裝函數,根據圖層類型返回addPolyline(),addPolygon()addCircleMarkers(),但是我沒有成功。看起來答案將在哈德利的高級材料中出現,但最有可能的是它超出了我的頭。作爲一個簡單的例子,我怎樣才能使類似下面的示例工作:包裝功能;函數返回函數

library(leaflet) 

wrapper <- function() { 
    myfunc <- function() {addPolylines(data = leaflet::atlStorms2005)} 
    return(myfunc) 
} 

# I want this 
leaflet() %>% addTiles() %>% addPolylines(data = leaflet::atlStorms2005) 

# but I need a wrapper function 
leaflet() %>% addTiles() %>% wrapper() 

回答

0

看來你需要修改你的包裝函數一點,在管道使用%>% wrapper()()

library(leaflet) 

wrapper <- function() { 
    myfunc <- function(.) {addPolylines(., data = leaflet::atlStorms2005)} 
    return(myfunc) 
} 

# I want this 
leaflet() %>% addTiles() %>% addPolylines(data = leaflet::atlStorms2005) 

# but I need a wrapper function 
leaflet() %>% addTiles() %>% wrapper()() 
0

它似乎並不像你需要一個函數返回一個函數。你只需要一個可以調用其他函數的函數。

wrapper <- function(x) { 
    x %>% addPolylines(data = leaflet::atlStorms2005) 
} 

leaflet() %>% addTiles() %>% wrapper()