r - pmap 没有跨数据框的行映射
问题描述
我正在尝试使用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 包(v0.2.0)于 2018 年 7 月 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
推荐阅读
- c++ - QT 自定义小部件悬停
- alibaba-cloud - 阿里巴巴云上的公共 DNS (IPv4) 是否用于其他云?
- java - hibernate 5 org.hibernate.hql.internal.ast.QuerySyntaxException: Emplooye 未映射
- php - 带有 PhpMyAdmin 5.0.4 的 PHP 问题版本
- openssl - 如何检查/比较 openssl 速度
- sql - 替换序列化 PHP 对象 Bia 中的文本 PHPMYADMIN MariaDB SQL 查询
- javascript - 如何防止图像离开html中的区域
- cocoapods - 像在 SPM 中一样在 CocoaPods 中创建多个模块
- python - 如何在游戏中使用元组?
- r - 更新到 Mac OS Big Sur 并在 R 中出现“警告:预期的最小视图高度”错误