奇妙で興味深いバグに気づきました。
as.numeric((Sys.Date()-30)-Sys.Date())
#[1] -30
どちらが正しい。だが:
library(dplyr)
(Sys.Date()-30)-Sys.Date() %>% as.numeric()
#[1] "1969-12-02"
%>%
単に出力を最初の引数スロットにフィードするだけの場合、この動作は確かに正しくありませんか?
将来的に再現できるようにコードを変更しました。
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]
コメントを追加