2017-11-09 7 views
2

これは複数のインスタンスに現れています。この現在のインスタンスが、これが私のために発生する多くのケースに一般化できるのかどうかはわかりませんが、答えがほんとうにあるかもしれません。パイプを不等式にどのように供給するのですか?

これは、データ処理をしているときにパイプの結果を評価したい場合に最も簡単なバージョンです。簡単な例は次のようになります。

多くの状況で
> seq(9) %>% > 4 
Error: unexpected '>' in "seq(9) %>% >" 
> seq(9) %>% . > 4 
Error in .(.) : could not find function "." 

所望の出力が論理ベクトルになる

FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE 

私はいくつかのパイプ出力に評価したいが、それを割り当て、その後の評価を実行する必要がありますそれは働く:

seq(9) -> vec 
vec > 4 

パイプチェーン内でこれらの種類の評価を完全に完了する方法はありますか?

+2

'sapply'は不要です、'> 'はベクトル化されました –

+0

@BenBolkerああ、いいですよ。 – Mako212

+0

いくつかの非常に関連した質問は、R-FAQを作成するのに良いかもしれません:[dplyrの配管コマンドを使った数値計算](https://stackoverflow.com/q/46836185/903061)、[ ](https://stackoverflow.com/q/38531508/903061)。私は他人を見たことも知っています。彼らは重複のように見えることはありませんが、標準的な重複はおそらく構築することができます。 – Gregor

答えて

4

パイプを使用する場合は中括弧を使用する必要があります。

seq(9) %>% {. > 4} 

[1] FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE 

あなたは、物事のこれらの種類をパイプするつもりなら、それはもう少し読みやすいコードになりますように私は、purrrを使用してお勧めします。やや広い文脈で

library(purrr) 

map_lgl(seq(9), ~.x > 4) 

[1] FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE 
+1

私はそれが奇妙な例だと知っていますが、 'map_lgl(seq(9)、〜.x> 4)'をunpipedの代わりの 'seq(9)> 4'より「読みやすく」記述するのはちょっと面倒です。 – Gregor

+0

私はあなたの要点を見ていますが、私は長いコードチェーンという意味でのことです。私はちょうどチェーンの真ん中に少しびくっとした括弧の使用を見つける。 –

1

、これは簡単にmutateで行われます。

library(dplyr) 
data_frame(x=1:9) %>% mutate(big_x = x>4) 

迷惑な意見:あなたは主に、原子ベクターで作業している場合、私はそのtidyverse /配管アプローチを疑いますそれは価値があるよりも多くのトラブルになるだろう。もう1つの答えが示唆しているように、purrrを使用することができますが、やはり基底Rが完全にうまくいくかもしれません。あなたの問題のコンテキストを増やすことが役に立ちます。

+0

私の仕事は実際には行列であり、データフレームに変換せずにdplyrコマンド(mutateなど)を使うことはできません。私は方法を探しましたが、データフレームに変換せずに機能が存在するようには見えません。 – Brandon

2

magrittrは、バイナリ演算子をパイプ可能な関数に変換するための "エイリアス"を提供します。私は彼らのために自分を気にしないが、あなたは

library(magrittr) 
seq(9) %>% is_greater_than(4) 

+の別名である)?addで完全なリストを参照してくださいを行うことができます。 +から[[までのすべての実装があります。

3

もう一つの選択肢は、機能ではなく演算子として>機能を呼び出すことです:

> seq(9) %>% `>`(4) 
[1] FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE 
> seq(9) %>% '>'(4) 
[1] FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE 

私はバッククォートはほとんど意味をなさないと思いますが、通常の引用符は、この場合にも動作しません。

関連する問題