我尝试获取一列索引向量,并将它们拼接到pluck()
调用中,以获取这些索引处的值。如果我在顶层的map()
调用中这样做,它可以正常工作,但当在mutate()
内部调用map()
时,它无法识别.x
参数。有人能解释一下为什么吗?有没有什么语法我漏掉了?
library(dplyr)
#>
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#>
#> filter, lag
#> The following objects are masked from 'package:base':
#>
#> intersect, setdiff, setequal, union
library(purrr)
lst <-
list(a=1, b=list(c=2, d=3))
str(lst)
#> List of 2
#> $ a: num 1
#> $ b:List of 2
#> ..$ c: num 2
#> ..$ d: num 3
#;; Note what is at index c(2L, 2L)
lst[[c(2L, 2L)]]
#> [1] 3
#;; Put that index in a dataframe column.
idx_df <-
tibble(idx=list(c(2L, 2L)))
idx_df
#> # A tibble: 1 × 1
#> idx
#> <list>
#> 1 <int [2]>
#;; This does not work, but I expect it to, as I believe it should work
#;; analagously to what is below.
tryCatch({
idx_df |>
mutate(val = map_dbl(idx, ~ pluck(lst, !!!.x)))
}
, error=\(e) e)
#> <simpleError in quos(..., .ignore_empty = "all"): object '.x' not found>
#;; This works, but I should be able to do this in a mutate call.
idx_df$val <-
map_dbl(idx_df$idx, ~ pluck(lst, !!!.x))
idx_df
#> # A tibble: 1 × 2
#> idx val
#> <list> <dbl>
#> 1 <int [2]> 3
创建于2023-05-09,使用reprex v2.0.2
1条答案
按热度按时间oprakyz71#
如突出显示的,问题似乎是在计算
!!!
时出现的。作为一个简单的解决方法,您可以创建一个临时函数,以便在调用该函数之前不会计算!!!
: