给出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
如何将符号放入参数列表?
答案 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