包装功能;返回函数的函数

时间:2017-07-05 15:54:25

标签: r

我不确定如何为包含magrittr pipe(%>%)的内容编写包装函数。我正在尝试创建一个包装函数,它返回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()

2 个答案:

答案 0 :(得分: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()()

答案 1 :(得分:0)

您似乎不需要返回函数的函数。你只需要一个可以调用其他函数的函数。

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

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