我正在尝试将函数映射到包含在其中的多个输入
使用purrr::pmap
的数据帧的行。我有一个reprex
下面:
library(tidyverse)
# Create dummy data
e <- 0.3
f <- 1:3
g <- 1:3
df <- tidyr::crossing(e = e, f = f, g = g)
# Create a simple function to use
new_ratio <- function(x, y, z){
return(x/(y + z))
}
# Apply pmap across rows of the dataframe `df` - not working as intended
purrr::pmap(df, ~ new_ratio(x = e, y = f, z = g))
#> [[1]]
#> [1] 0.150 0.075 0.050
#>
#> [[2]]
#> [1] 0.150 0.075 0.050
#>
#> [[3]]
#> [1] 0.150 0.075 0.050
#>
#> [[4]]
#> [1] 0.150 0.075 0.050
#>
#> [[5]]
#> [1] 0.150 0.075 0.050
#>
#> [[6]]
#> [1] 0.150 0.075 0.050
#>
#> [[7]]
#> [1] 0.150 0.075 0.050
#>
#> [[8]]
#> [1] 0.150 0.075 0.050
#>
#> [[9]]
#> [1] 0.150 0.075 0.050
由reprexpackage(v0.2.0)创建于2018-07-16。
可以看出,我真的很想创建一个简单的输出
逐行在此给出比率
e/(f+g)
简单的例子。该函数不断返回相同的值用于不同的输入。在第一行中,我希望
输出
0.3/(1 + 1) = 0.15
,在第二行中0.3/(1 + 2) = 0.1
等谁能告诉我如何解决这个问题?我不太
从文档中了解如何应用
pmap
最佳答案
我们可以将列名更改为参数名,它应该可以工作
pmap_dbl(setNames(df, c('x', 'y', 'z')), new_ratio)
#[1] 0.150 0.100 0.075 0.100 0.075 0.060 0.075 0.060 0.050
或者,如果我们打算使用
~
,则参数为..
,后跟数字pmap_dbl(df, ~ new_ratio(x = ..1, y= ..2, z = ..3))
#[1] 0.150 0.100 0.075 0.100 0.075 0.060 0.075 0.060 0.050
关于r - pmap不跨数据帧行映射,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51372041/