R函数可以访问自己的名字吗?

时间:2011-12-01 21:25:22

标签: r function

你能编写一个打印出自己名字的函数吗?

(显然没有硬编码)

3 个答案:

答案 0 :(得分:7)

你确定可以。

fun <- function(x, y, z) deparse(match.call()[[1]])
fun(1,2,3)
# [1] "fun"

答案 1 :(得分:5)

你可以,但是以防万一因为你想以递归方式调用函数,请参阅?Recall,这对于命名更改是健壮的,并且避免了以其他方式处理以获取名称的需要。

  

召回包:基础R文档

     

递归调用

     

说明

‘Recall’ is used as a placeholder for the name of the function in
which it is called.  It allows the definition of recursive
functions which still work after being renamed, see example below.

答案 2 :(得分:5)

正如你在其他很好的答案中看到的那样,答案似乎是“是”......

但是,正确的答案实际上是“是的,但并非总是如此”。你能得到的实际上是用来调用函数的名称(或表达式!)。

首先,使用sys.call可能是查找名称的最直接方式,但是您需要将其强制转换为字符串。 deparse对此更为强大。

myfunc <- function(x, y=42) deparse(sys.call()[[1]])

myfunc (3) # "myfunc"

...但您可以通过多种方式调用函数:

lapply(1:2, myfunc) # "FUN"
Map(myfunc, 1:2) # (the whole function definition!)
x<-myfunc; x(3)   # "x"
get("myfunc")(3) # "get(\"myfunc\")"

基本问题是函数没有名称 - 只是通常将函数分配给变量名。不是你必须 - 你可以有匿名函数 - 或者为同一个函数分配许多变量名(上面的x案例)。