如何评估对match.call()的呼叫?

问题描述 投票:0回答:1

我正在尝试使用一个名为“ 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()函数不evaluate“ a”和“ b”的值,而是将它们作为names。我发现这很烦人,因为当我编写一个for循环从列表中读取“ a”的值并在for循环内调用函数“ func”时,“ 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(),但没有一个起作用。

任何想法都将不胜感激。

P.S。开发人员,请不要使用match.call()来检查您的输入,否则会妨碍自动化。

r debugging evaluation causality
1个回答
0
投票
我不确定以下是问题的要求,但是在每个参数上调用eval允许函数使用其值。

func <- function(a, b){ tempcall <- match.call() a <- eval(tempcall[['a']]) b <- eval(tempcall[['b']]) a + b } func(pi, 2) #[1] 5.141593

© www.soinside.com 2019 - 2024. All rights reserved.