逐字命令参数:包装器中的deparse(substitute(foo))
对于那些精通R计算器如何处理函数调用的人来说,这里有一个小难题。假设我想编写一个函数,它接受一个R语句,与我在命令行中编写的语句相同,并同时响应它和计算结果。例如:逐字命令参数:包装器中的deparse(substitute(foo)),r,R,对于那些精通R计算器如何处理函数调用的人来说,这里有一个小难题。假设我想编写一个函数,它接受一个R语句,与我在命令行中编写的语句相同,并同时响应它和计算结果。例如: > p.eval(sum(1:3)) sum(1:3) --> 6 这很容易;下面是p.eval()的定义: p.eval试试这个: > "%PE%" <- function(x, ...) do.call(p.eval, list(substitute(x))) > sum(1:3) %PE%
> p.eval(sum(1:3))
sum(1:3) --> 6
这很容易;下面是p.eval()
的定义:
p.eval试试这个:
> "%PE%" <- function(x, ...) do.call(p.eval, list(substitute(x)))
> sum(1:3) %PE% 0
sum(1:3) --> 6
%PE%和(1:3)%PE%0
总和(1:3)->6
也可以让p.eval返回“v”,然后:
p.eval <- function(v,prefix="--> ") {
cmd <- deparse(substitute(v)); cat(cmd,prefix,v,"\n") ; return(v) }
"%PE%" <- function(x, y=NULL) x
sum(1:3) %PE% Inf
#[1] 6
sum(1:3) %PE% # won't accept single argument
r # give it anything
#[1] 6
p.eval如果你要走这条路,我建议你阅读,尤其是“从另一个函数调用”部分优秀资源,哈德利。期待其他章节的完成。
> "%PE%" <- function(x, ...) do.call(p.eval, list(substitute(x)))
> sum(1:3) %PE% 0
sum(1:3) --> 6
p.eval <- function(v,prefix="--> ") {
cmd <- deparse(substitute(v)); cat(cmd,prefix,v,"\n") ; return(v) }
"%PE%" <- function(x, y=NULL) x
sum(1:3) %PE% Inf
#[1] 6
sum(1:3) %PE% # won't accept single argument
r # give it anything
#[1] 6