我开始学习"purrr“库的用法,并想知道如何使用以下内容:
目标
将函数应用于以输入为列的dataframe的每一行,并将函数输出绑定为输入数据row中的列。
Idea
从文档来看,map_dfc似乎是一个完美的函数。
尝试解决方案
library(purrr)
library(dplyr)
test_func <- function(n, lambda){
return(n+lambda)
}
n <- seq(1,10,1)
lambda <- seq(1, 10, 1)
new_df <- list(n=n,lambda=lambda) %>% cross_df()
new_df <- map_dfc(new_df, test_func)
# even tried the below
# new_df <- map_dfc(new_df, ~test_func) 误差
Error in .f(.x[[i]], ...) : argument "lambda" is missing, with no default发布于 2019-04-20 11:19:18
purrr的方式--看起来**--将是invoke的使用
new_df %>%
mutate(new_col = invoke(test_func, new_df))
# A tibble: 100 x 3
# n lambda new_col
# <dbl> <dbl> <dbl>
# 1 1 1 2
# 2 2 1 3
# 3 3 1 4
# 4 4 1 5
# 5 5 1 6
# 6 6 1 7
# 7 7 1 8
# 8 8 1 9
# 9 9 1 10
#10 10 1 11
# … with 90 more rows在帮助文件中:
这对函数使组合函数和参数列表更容易获得结果。invoke是do.call的包装器,便于在管道中使用。
所以invoke(test_func, new_df)和
test_func(new_df[[1]], new_df[[2]])**帮助文件还说

没有purrr包
do.call(test_func, new_df)发布于 2019-04-20 11:18:48
您需要使用map2_*系列函数,因为您要在两列上使用walk:
map2_dfc(new_df[1],new_df[2],test_func)编辑您可以使用base的Reduce实现同样的功能。
Reduce(test_func,new_df)
#[1] 2 3 4 5 6 7 8 9 10 11purrr输出:您可以根据需要重命名您的列:
n
<dbl>
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 9
9 10
10 11https://stackoverflow.com/questions/55772906
复制相似问题