使用purrr :: pmap或purrr:invoke_rows从data.frame创建函数

时间:2016-10-03 13:56:16

标签: r functional-programming purrr

我尝试使用data.frame的行创建函数。我希望每个函数都与data.frame的一行相关联,因此希望将它们存储在data.frame的列表列中。

我尝试使用purrrpmap一些invoke_rows函数来执行此操作。

示例:

a <- as.data.frame(list(col1 = c(1,2,3), col2 = c(2,3,4)))

function_factory <- function(col1, col2) {
  function() {
    print(col1)
    runif(1, min = col1, max = col2)
  }
}

my_functions <- a %>% invoke_rows(.f = function_factory, .d = ., .to = "col3")

my_functions$col3[[1]]()
my_functions$col3[[2]]()
my_functions$col3[[3]]()

每个函数在生成函数的行上打印3(col1的最后一行)而不是col1的值。

我可以使用Map工作,但想了解我在purrr函数中做错了什么。有什么想法吗?

这是我使用Map的功能:

map_to_listcolumn <- function(.d, .f, .labels = TRUE, .to = "out") {

    .d <- as.data.frame(.d)

    new_map <- purrr::lift_dl(Map, f = .f) 

    to_col <- new_map(.d[, names(formals(.f)), drop = FALSE])

    if(.labels == TRUE) {
      .d[.to] <- I(list(to_col))
      return(.d)
    } else {
      return(to_col)
    }

  }

0 个答案:

没有答案