r - pmap 不跨数据帧行映射

标签 r tidyverse purrr

我正在尝试将一个函数映射到包含在 使用 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

reprex package 创建于 2018-07-16 (v0.2.0).

可以看出我真的很想创建一个简单的输出 逐行在此给出比率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/

相关文章:

reshape2 和宽(推算)时间变量

r - 有些单词不会使用 tm ("easier"或 "easiest"进行词干提取)

r - 如何将碎石图比例设置为与主成分相同?

R中树列表结构的递归映射

r - 如何从长数据帧格式在 ggplot 中制作堆积条形图?

r - 为 13K pdf 文档运行 for 循环时出现空间不足错误

r - 以迭代方式在数据框中创建多个新列

r - 列名上的整洁评估映射

r - 让函数接受参数列表列

r - 如何从列表列中的列表中提取最大值并将其添加为 tibble 中的新列?