2017-03-02 3 views
4

パイプを介して渡されたデータフレームの名前を出力したいと考えています。これは可能ですか?できます。パイプで渡されたデータフレームの名前をR

printname <- function(df){ 
    print(paste(substitute(df))) 
} 
printname(mtcars) 
#[1] "mtcars" 

ただし、 "。"が返されます。この機能がmagrittrパイプを使用してパイプされているとき。

mtcars %>% printname 
# [1] "." 

ログインして生産工程で使用される機能のカスタムエラーメッセージを書くときに便利だろう - それは何かが失敗した場所をログに唯一のものであるかどうかを知るのは難しいです「」

mtcars %>%ピースを含む元のコールを返すだけで十分でしょう。

+0

data.frameの名前を知らずにパイプラインを開始するにはどうすればよいですか? 'ゲット'?ここにいくつかの欠落した文脈があります。 – alistaire

+0

コードを書くときに名前がわかりますが、パイプを通じて呼び出す関数は名前を知らないので、情報の誤りを引き起こすことはできません。ランタイムアサーションで、エラーの原因となったデータフレームの名前を含むエラーを発生させます。 –

+0

フェア。私はそれについて考えるようになりました。 – alistaire

答えて

6

これは最初の試みですが、ハックのようですが、うまくいくようです。

find_chain_parts <- function() { 
    i <- 1 
    while(!("chain_parts" %in% ls(envir=parent.frame(i))) && i < sys.nframe()) { 
      i <- i+1 
     } 
    parent.frame(i) 
} 

printfirstname <- function(df){ 
    ee <- find_chain_parts() 
    print(deparse(ee$lhs)) 
} 

mtcars %>% printfirstname 
# [1] "mtcars" 

pipe機能は、チェーン部品を追跡した環境を作成します。私はこの変数を探している現在の実行環境を歩き、そこに格納されているlhs情報を使ってパイプの先頭にあるシンボルを見つけようとしました。これは十分にテストされていません。

関連する問題