如何将符号放入参数列表

How do I place a symbol into an argument list

给定一个 symbol:

sym <- as.symbol("x")

我想创建一个 alist 并以此符号作为名称。

correct_answer <- alist(x = )

以下内容不太有效,因为它将 NULL 作为值。

setNames(list(NULL), deparse(sym))

答案的第一个元素似乎是一个空符号。

class(correct_answer[[1]])
## [1] "name"
deparse(correct_answer[[1]])
## [1] ""

但是您不能使用 as.symbol() 创建空符号。

as.symbol("")
## Error in as.symbol("") : attempt to use zero-length variable name

如何将符号放入参数列表?

只需创建一个虚拟 alist,然后通过解析符号来覆盖名称。

setNames(alist(dummy = ), deparse(sym))

或者,可以使用 formals 函数创建参数列表。我正在将您的答案与 formals

进行比较

使用 alist() - 根据@Richie Cotton 的回答

sym1 <- as.symbol('x')
sym2 <- as.symbol('y')
sym3 <- as.symbol('z')
str(c(setNames(alist(dummy = ), deparse(sym1)),
      setNames(alist(dummy = ), deparse(sym2)),
      setNames(alist(dummy = ), deparse(sym3))))

# List of 3
# $ x: symbol 
# $ y: symbol 
# $ z: symbol 

没有alist()

使用 formals 不带符号

str(formals(function(x,y,z){}))
# Dotted pair list of 3
# $ x: symbol 
# $ y: symbol 
# $ z: symbol 

使用 formals 和符号

c_alist <- function( x )
{
  setNames( formals(c_alist), deparse(x) )   # or # setNames( formals(c_alist), as.character(x) )
}
str(sapply( c(sym1, sym2, sym3), c_alist ) )
# $ x: symbol 
# $ y: symbol 
# $ z: symbol