r - 在R中传递匿名函数的变量值
问题描述
我创建了一个带有几个包装器的便利函数,出于这个问题的目的,它将任何输入转换为字符串,除非符号引用一个字符对象(检查下面省略的那个),在这种情况下它会添加内容该对象的输出。
一切正常,除了尝试使用匿名函数,我最终在匿名函数中捕获变量的名称,而不是它的值。我如何捕获价值?
my_wrapper <- function(...) {
input <- rlang::enquos(...)
convert_all_args_to_strings(input)
}
convert_all_args_to_strings <- function(input) {
expressions <- lapply(input, rlang::quo_get_expr)
types <- vapply(expressions, typeof, FUN.VALUE = character(1))
str_from_character <- unlist(expressions[types == "character"])
symbols <- vapply(expressions[types == "symbol"],
FUN.VALUE = character(1),
rlang::as_name)
objects <- mget(symbols, ifnotfound = list(NULL),
inherits = T)
str_from_objects <- unlist(objects)
confirmed_symbols <- vapply(objects, is.null,
FUN.VALUE = logical(1))
str_from_symbols <- symbols[confirmed_symbols]
c(str_from_character, str_from_symbols,
str_from_objects, use.names = FALSE)
}
places <- c("here", "there", "somewhere")
# DESIRED OUPTUT
my_wrapper("hier", "da", aqui, alla, places)
#> [1] "hier" "da" "aqui" "alla" "here" "there"
#> [7] "somewhere"
# DESIRED OUPTUT
lapply(places, my_wrapper, bla, bla, bla)
#> [[1]]
#> [1] "here" "bla" "bla" "bla"
#>
#> [[2]]
#> [1] "there" "bla" "bla" "bla"
#>
#> [[3]]
#> [1] "somewhere" "bla" "bla" "bla"
# WRONG OUPTUT
lapply(places, function(x) my_wrapper(x))
#> [[1]]
#> [1] "x"
#>
#> [[2]]
#> [1] "x"
#>
#> [[3]]
#> [1] "x"
解决方案
推荐阅读
- android - 构建 APK 时出错 - Android Studio
- python - 气流远程 PythonOperator
- flutter - Flutter Getx 如何将 obs 绑定到 Widget?
- aws-lambda - 使用无服务器同步 RPC 微服务
- python - 104,连接被对等方重置。发送多个长 http post 请求时
- python - 将 Json 格式字符串转换为链接{"link":"https://i.imgur.com/zfxsqlk.png"}
- c++ - Qt5 标签更改文本显示损坏
- javascript - 在 Typescript 中解构函数参数
- liquibase - 两个表之间的 Liquibase 检查约束
- swift - SwiftUI 表单中的选取器在选择一个值后变为灰色