2

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

我尝试使用一些purrr函数来做到这一点,即pmapand 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_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)
    }

  }
4

0 回答 0