首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >输入的每一行数据的map_dfc

输入的每一行数据的map_dfc
EN

Stack Overflow用户
提问于 2019-04-20 11:07:38
回答 2查看 2K关注 0票数 3

我开始学习"purrr“库的用法,并想知道如何使用以下内容:

目标

将函数应用于以输入为列的dataframe的每一行,并将函数输出绑定为输入数据row中的列。

Idea

从文档来看,map_dfc似乎是一个完美的函数。

尝试解决方案

代码语言:javascript
复制
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) 

误差

代码语言:javascript
复制
Error in .f(.x[[i]], ...) : argument "lambda" is missing, with no default
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-20 11:19:18

purrr的方式--看起来**--将是invoke的使用

代码语言:javascript
复制
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)

代码语言:javascript
复制
test_func(new_df[[1]], new_df[[2]])

**帮助文件还说

没有purrr

代码语言:javascript
复制
do.call(test_func, new_df)
票数 2
EN

Stack Overflow用户

发布于 2019-04-20 11:18:48

您需要使用map2_*系列函数,因为您要在两列上使用walk

代码语言:javascript
复制
map2_dfc(new_df[1],new_df[2],test_func)

编辑您可以使用baseReduce实现同样的功能。

代码语言:javascript
复制
 Reduce(test_func,new_df)
 #[1]  2  3  4  5  6  7  8  9 10 11

purrr输出:您可以根据需要重命名您的列:

代码语言:javascript
复制
     n
   <dbl>
 1     2
 2     3
 3     4
 4     5
 5     6
 6     7
 7     8
 8     9
 9    10
10    11
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55772906

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档