你能编写一个打印出自己名字的函数吗?
(显然没有硬编码)
答案 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
案例)。