関数呼び出し(たとえば、mean(x = 1:10))を引数として取り、呼び出されている関数の名前(mean)だけを返す関数Fの記述方法を知っている人はいますか?
これまでの私の最善の試みを以下に要約します
(function(x1){
return(deparse(substitute(x1)))
})(mean(x = 1:10))
### 'mean(x = 1:10)'
解析を解除する前にx1(関数呼び出し)を式に変更してもあまり役に立たないようです。
(function(x1){
return(deparse(as.expression(substitute(x1))))
})(mean(x = 1:10))
# "expression(mean(x = 1:10))"
可能であれば、無名関数も引数として使用できるようにしたいので、Fは(function(x)print(x))(1)に対して(function(x)print(x))を返す必要があります。説明が必要な場合は、お気軽にコメントしてください。ありがとう。
edit1:念のために言っておきますが、最初の括弧をチェックして、その前のコード( "mean"を返す"mean(x = 1:10)"の場合)を "bad(Fun_nAme"は実際にはRの有効な関数名です。
回答された質問: Josh O'Brienの答えは完璧でした:上記の条件を満たす関数Fは次のとおりです。
F <- function(x) deparse(substitute(x)[[1]])
二項演算子、標準関数、無名関数でうまく機能します。