You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于purrr::pluck()与purrr::map()搭配double类型参数的行为疑问

关于purrr包pluck()和map()函数特殊参数行为的解释

此问题关联Hadley Wickham所著《Advanced R》9.2.6章节练习2

问题场景

以下代码的运行结果让人困惑:

# pluck with index of type `double`
pluck(1:3, -2.3456)   # returns 1
pluck(1:3, 2.9876)    # returns 2

# map with vector of type `double`
map(1:3, runif(2))    # returns list(1, 2, 3)

一、pluck()处理double类型索引的逻辑

purrr的pluck()在接收非整数类型的索引时,会直接截断小数部分,只保留整数部分作为实际使用的索引:

  • 对于-2.3456,截断后得到整数-2,表示从向量末尾倒数第2个位置取值。原向量1:3的倒数第2个元素是第1位的1,因此返回1。
  • 对于2.9876,截断后得到整数2,对应向量第2位的元素2,因此返回2。

这里的转换规则是直接丢弃小数位,并非四舍五入,是pluck()内部处理索引的默认逻辑。

二、map()传入double向量参数的逻辑

map()的第二个参数如果不是函数,会被当作元素提取的索引来使用。runif(2)生成的是两个0到1之间的double值(比如c(0.3, 0.7)),这些值都小于向量的最小有效索引1。

当map()遇到无效索引(小于1或大于向量长度)时,会直接返回原输入的元素。所以map(1:3, runif(2))中,每个输入元素(1、2、3)对应的索引都无效,最终返回原元素组成的列表list(1, 2, 3)。

内容的提问来源于stack exchange,提问作者kingddd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 05:00:15