0

我正在尝试使用名为“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() 来检查您的输入,它会阻碍自动化。

4

0 回答 0