我正在尝试使用名为“causaldrf”的 R 库的一些函数。假设在库中,我们有一个函数“func(a,b)”,它接受一个字符串“a”并在数据帧“b”中调用一个名为“a”的列。
该功能是这样实现的(简化):
func(a,b){
tempcall <- match.call()
Operation then performed on tempcall, for example:
my_string <- tempcall$a
}
事实证明,match.call() 函数不会评估"a" 和 "b" 的值,而是将它们作为names。我觉得这很烦人,因为当我编写一个从列表中读取“a”的值并在 for 循环中调用函数“func”的 for 循环时,“a”的值并没有在“func”中使用,而是, tempcall 包括未评估的名称。这使得 for 循环无法使用。
我想知道,有没有办法可以让 match.call() 评估而不是仅仅传递名称?
一种解决方案是为 func() 编写一个包装器,其中我首先创建一个 func() 字符串及其参数,例如“func(a,b)”,然后通过 parse("func(a,b) ") 然后通过 eval(parse("func(a,b)")) 对其进行评估。这样,我可以评估字符串和整数的值,但是数据帧“b”作为列表传递,这搞砸了。我尝试通过 as.dataframe(b) 和不同类型的数据框将数据框作为数据框传递,但没有一个有效。
然后,我在“func”的库中使用了 parse()、deparse() 和 eval() 来评估 match.call(),但没有一个起作用。
任何想法,将不胜感激。
PS 开发人员,请不要使用 match.call() 来检查您的输入,它会阻碍自动化。