6

関数呼び出し(たとえば、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]])

二項演算子、標準関数、無名関数でうまく機能します。

4

2 に答える 2

8

これは、あなたが望むことをする簡単な関数です:

F <- function(x) deparse(substitute(x)[[1]])

F(mean(x=1:10))
# [1] "mean"

F((function(x) print (x))(1))
# [1] "(function(x) print(x))"

F(9+7)
# [1] "+"
于 2012-09-03T20:15:19.687 に答える
1

あなたが何をしようとしているのか、それが良い考えなのか、それともこれがあなたが望むものなのかはわかりませんが、正規表現を使った方法は次のとおりです。

FUN <- function(x1){
    z <- deparse(substitute(x1))
    list(fun=strsplit(z, "\\(")[[c(1, 1)]],
    eval=x1)
}

FUN(mean(x = 1:10))
于 2012-09-03T19:41:11.703 に答える