gpt4 book ai didi

r - 使用数据框的列作为使用 pmap 的函数的参数

转载 作者:行者123 更新时间:2023-12-02 19:20:21 25 4
gpt4 key购买 nike

我正在尝试计算一个函数,其参数是数据框中列的名称。我需要循环每一行并计算函数。看起来 pmap 是执行此操作的一种巧妙方法,但我被迫指定“..1, ..2,”符号来指示数据框中的列位置。我认为这不是一种可重复的运行方式。

尽管如此,当我使用匿名函数而不是命名函数时,它只知道列的名称。

library(purrr)
#> Warning: package 'purrr' was built under R version 3.6.3
toy_df <- data.frame(a = 1:10, b = 2:11, c = 3:12)
toy_function <- function(a, b, c) {
data.frame(result = a^2 + b^3 + log(a)*c + sin(a)*b)
}

## this fails
toy_fail <- purrr::pmap(toy_df, ~ toy_function())
#> Error in data.frame(result = a^2 + b^3 + log(a) * c + sin(a) * b): argument "a" is missing, with no default

## this works
toy_pass <- purrr::pmap(toy_df, ~ toy_function(..1, ..2, ..3))


## this works and I didn't need to specify the positions
toy_also_pass <- purrr::pmap(toy_df, function(a, b, c){
data.frame(result = a^2 + b^3 + log(a)*c + sin(a)*b)
})

reprex package于2020年7月28日创建(v0.3.0)

最佳答案

以 R 为基数:

do.call(rbind, do.call(Map, c(list(f = toy_function), toy_df)))
# result
# 1 10.68294
# 2 36.50048
# 3 79.05754
# 4 145.53375
# 5 246.51252
# 6 391.37817
# 7 583.76908
# 8 822.69864
# 9 1109.29066
# 10 1452.64679

在 tidyverse 中,等价的是

purrr::invoke(purrr::pmap_dfr, list(.f = toy_function, .l = toy_df))

但它允许更简单

purrr::pmap_dfr(toy_df, toy_function)

关于r - 使用数据框的列作为使用 pmap 的函数的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63143962/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com