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