2016-04-19 15 views
3

私はRのことがかなり新しいです。%>%演算子と "。"演算子の使い方を理解しようとしています。 (ドット)プレースホルダー。次のコードは、パイプとドットプレースホルダをRに組み込む

私は今is.data.frameメソッドにプレースホルダをパイプしています
ensure_data.frame <- ensures_that(. %>% is.data.frame) 
data.frame(x = 5) %>% ensure_data.frame 

を失敗したが簡単な例として、次のコードは、

library(magrittr) 
library(ensurer) 
ensure_data.frame <- ensures_that(is.data.frame(.)) 
data.frame(x = 5) %>% ensure_data.frame 

に動作します。

私は、遅れているドットプレースホルダの制限/解釈を私が理解していると思っていますが、誰でもこれを明確にすることができますか?

答えて

1

「問題」はmagrittr匿名関数のショートハンド表記を有することである:ドットが(ある場合

. %>% is.data.frame 

は、概ね換言

function(.) is.data.frame(.) 

と同じです左端)の左側には、パイプに特別な動作があります。

あなたはいくつかの方法で行動をエスケープできます。

(.) %>% is.data.frame 

またはLHSは、この特定の例では. と同じではない他の方法、これは望ましくないbehaviuourように見えるかもしれませんが、一般的にこのような例では、パイプの必要は最初の式は本当にありませんので、is.data.frame(.)

data %>% 
some_action %>% 
lapply(function(.) final_action(some_other_action(.))) 
よりclearnerことを主張することができ . %>% is.data.frameのように、表現され、かつ

data %>% 
some_action %>% 
lapply(. %>% some_other_action %>% final_action) 

よう 例

0

これは問題です:

​​

は私にはバグのように見えますが、dplyr専門家は、チャイムができ

あなたの式の簡単な回避策が.[] %>% is.data.frameを行うことです。

+0

dplyrと回避策の不一致があることを明確にしてくれてありがとう! –

関連する問題