我正在尝试使用 data.frame 的行创建函数。我希望每个函数都与 data.frame 的一行相关联,因此想将它们存储在我的 data.frame 的列表列中。
我尝试使用一些purrr
函数来做到这一点,即pmap
and 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)
}
}