我在一个函数中有一个调用被拒绝(使它更易于阅读),并将其作为输出S3对象的一部分包含在内,供最终用户参考。
func1 <- function(v1, v2, ...){
return(deparse(match.call()))
}
obj <- func1(11, 22, v3 = 33)
obj
变量现在包含:
“ func1(v1 = 11,v2 = 22,v3 = 33)”
现在在另一个接受该对象作为输入的函数中,我想将此调用字符向量转换为具有以下相同结构的命名列表:
list(v1 = 11, v2 = 22, v3 = 33)
$ v1
[1] 11
$ v2
[1] 22
$ v3
[1] 33
需要明确的是,我不愿意按原样存储调用对象,因为在探索S3对象时,它不会给用户足够的信息(我认为程序员应该处理所有事情,而用户应该只是享受功能)。
答案 0 :(得分:3)
怎么样
to_list <- function(x) {
xex <- parse(text= x )[[1]]
xex[[1]] <- quote(list)
eval.parent(xex)
}
to_list(obj)
基本上,我们将字符串解析回一个表达式,然后用list()
函数换出原始函数名称,可以对它求值以实际构建列表。
答案 1 :(得分:1)
您可以执行以下操作:
eval(parse(text=sub("^.+?\\(","list(",obj)))