dplyr dateas.numeric奇妙な振る舞い

アミット・コーリ

奇妙で興味深いバグに気づきました。

as.numeric((Sys.Date()-30)-Sys.Date())
#[1] -30

どちらが正しい。だが:

library(dplyr)
(Sys.Date()-30)-Sys.Date() %>% as.numeric()
#[1] "1969-12-02"

%>%単に出力を最初の引数スロットにフィードするだけの場合、この動作は確かに正しくありませんか?

セバスチャン-c

将来的に再現できるようにコードを変更しました。

date <- as.Date("2016-10-18")

as.numeric((date-30)-date)
#[1] -30
(date-30)-date %>% as.numeric()
#[1] "1969-12-02"

また、括弧を配置すると、次の結果が変わる可能性があることに気付くかもしれません。

(date-30)-(date %>% as.numeric())
#[1] "1969-12-02"
((date-30)-date) %>% as.numeric()
#[1] -30

答えは、構文ヘルプページで指定されている操作の順序ですそれは次のように述べています:

次の単項演算子と二項演算子が定義されています。それらは、最高から最低まで、優先順位グループにリストされています。

:::::名前空間内の変数へのアクセス
$ @コンポーネント/スロット抽出
[[[インデックス
^指数(右から左)
-+単項マイナスおよびプラス
:シーケンス演算子
%any%特殊演算子(%%および%/%を含む)
* /乗算、除算
+-(バイナリ)加算、減算

%any%前にあることに注意してください+ - (binary)単項演算子と二項演算子の違いについては、この質問への回答をお勧めします

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事