【问题标题】:How do I place a symbol into an argument list如何将符号放入参数列表
【发布时间】:2017-08-01 07:37:42
【问题描述】:

给定一个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

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

【问题讨论】:

  • @frank 已修复。这个问题在我写的时候发生了变化。

标签: r arguments symbols


【解决方案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 

【讨论】:

  • 我展示了获取相同符号列表的替代方法。
  • @RichScriven 我添加了c_alist 使用符号的函数。请看一下。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2017-01-28
    • 2020-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-13
    • 1970-01-01
    • 2012-11-13
    • 1970-01-01
    相关资源
    最近更新 更多