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

时间:2017-03-10 20:29:49

标签: r arguments symbols

给出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

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

或者,可以使用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