% gsub("(","('",.,fixed=TRUE) %>% gsub(", ","-6ren">
gpt4 book ai didi

r - 将点中的名称更改为字符

转载 作者:行者123 更新时间:2023-12-04 11:42:58 26 4
gpt4 key购买 nike

我有一个这样的功能:

my_fun <- function(...,x,y){
list(...)
}

我希望能够将变量名称或字符串提供给省略号,并在返回之前将所有内容转换为字符。在我的实际情况中,我将通过 do.call(custom_fun,list(...)) 调用自定义函数.

预期输出

我在这里问的是一个函数 my_fun2这将具有以下行为:
my_fun2 <- function(...,x,y){
MAGIC(list(...))
}

identical(my_fun("a",foo= "b == 3",c("c","d"),bar=c("e","f"),c("g","h")),
my_fun2("a",foo= b == 3,c("c","d"),bar = c("e",f),c(g,h)))

应该是 TRUE两个术语都返回:
# [[1]]
# [1] "a"
#
# $foo
# [1] "b == 3"
#
# [[3]]
# [1] "c" "d"
#
# $bar
# [1] "e" "f"
#
# [[5]]
# [1] "g" "h"

我试过的...
my_fun2 <- function(...,x,y){
lapply(pryr::dots(...),as.character)
}

my_fun2("a",b == 3,c("c","d"),c("e",f),c(g,h))
# [[1]]
# [1] "a"
#
# [[2]]
# [1] "==" "b" "3"
#
# [[3]]
# [1] "c" "c" "d"
#
# [[4]]
# [1] "c" "e" "f"
#
# [[5]]
# [1] "c" "g" "h"

备注

我对表达式、引号、quosures、调用、名称......没有很好的理解,所以我会感谢与案例相关的解释。

我对使用其中一个(或两者!)的解决方案没问题 base ( substitutequote 等)和 dplyr答案( enquoquos 等)

最佳答案

我不骄傲,但这是必须的……

library(dplyr)
library(purrr)
library(pryr)
my_fun2 <- function(...,x,y){
dots0 <- as.character(substitute(alist(...)))[-1]
vectors <- substr(dots0,1,2) == "c("
dotsv <- dots0[vectors] %>%
gsub("\"","",.) %>%
gsub("(","('",.,fixed=TRUE) %>%
gsub(", ","', '",.,fixed=TRUE) %>%
gsub(")","')",.,fixed=TRUE) %>%
map(~eval(parse(text=.x)))
setNames(c(as.list(dots0[!vectors]),dotsv),names(pryr::dots(...)))
}

identical(my_fun2("a",foo= "b == 3",c("c","d"),bar = c("e","f"),c("g","h")),
my_fun2("a",foo= b == 3,c("c","d"),bar = c("e",f),c(g,h)))
# [1] TRUE

# [[1]]
# [1] "a"
#
# $foo
# [1] "b == 3"
#
# [[3]]
# [1] "c" "d"
#
# $bar
# [1] "e" "f"
#
# [[5]]
# [1] "g" "h"

关于r - 将点中的名称更改为字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47291298/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com