湖上湖
在我的经验中,通常有一种比使用代码字符串更好的“在语言上计算”的方法;根据我的经验,高级代码需要大量的安全保护来保证合理的输出。相同的任务通常可以通过直接将R代码作为语言对象来解决;Hadley Wickham对R中的元编程有一个有用的指南。这里:gtools库中的Def宏()函数是我最喜欢的替代方法(没有半途而废的R双关语)。require(gtools)# both action_to_take & predicate will be subbed with codeF <- defmacro(predicate, action_to_take, expr =
if(predicate) action_to_take)F(1 != 1, action_to_take = print('arithmetic doesnt work!'))F(pi > 3, action_to_take = return('good!'))[1]
'good!'# the raw code for Fprint(F)function (predicate = stop("predicate not supplied"), action_to_take = stop("action_to_take not
supplied")) {
tmp <- substitute(if (predicate) action_to_take)
eval(tmp, parent.frame())}<environment: 0x05ad5d3c>这种方法的好处是,您可以得到语法上合法的R代码。可以找到更多关于这个有用函数的信息。这里:希望能帮上忙!