$
でmutate
を使用して面白い結果を得ています。同じ名前のグローバル環境内に変数がある要素として抽出されます。 (私はR 3.1.3とdplyr 0.4.3.9を実行しているよ。)これは正常に動作します:ドル記号演算子を使用するときにmutate()がグローバル変数の値を使用して抽出しようとしています
library(dplyr)
df <- data.frame(time = 1:5, val = c(2.3, 3.9, NA, 8.1, 9.6))
mutate(df, val = approx(time, val, time)$y)
# time val
# 1 1 2.3
# 2 2 3.9
# 3 3 6.0
# 4 4 8.1
# 5 5 9.6
をしかし、私はグローバル変数y
を定義する場合は、面白いことが起こる:使用していることを
y <- 1L
mutate(df, val = approx(time, val, time)$y)
# Error: invalid subscript type 'integer'
注意を期待通りに文字列引数を持つ二重括弧はまだ動作します:
:y
が文字の場合は
mutate(df, val = approx(time, val, time)[['y']])
# time val
# 1 1 2.3
# 2 2 3.9
# 3 3 6.0
# 4 4 8.1
# 5 5 9.6
は興味深いことに、我々はエラーの異なる種類を取得します
y <- 'a'
mutate(df, val = approx(time, val, time)$y)
# Error: unsupported type for column 'val' (NILSXP, classes = NULL)
は最後に、完全を期すため、ここではこれは間違いなくないリスト抽出のための通常の動作であることを実証している例です:私たちはmutate
の内側に、この奇妙な振る舞いを取得する理由
l <- list(y = 1:4)
y <- 'a'
l$y
# [1] 1 2 3 4
誰でも知っていますか?二重括弧を使用して抽出するか、検索パスに矛盾する変数がないことを保証する以外に、この問題を簡単に解決する方法はありますか? dplyr mutate fails with named vector?
はのように思えますバグ。あなたは '$ 'y' 'を使うことができますが、それはちょうどハックです。 – Frank
私は[バグ報告](https://github.com/hadley/dplyr/issues)を提出したいと思います。ダブルブラケットの抽出は非常に合理的な回避策のようです。 – MrFlick
実際には、誰かがこれをバグとして提出したように見えます(これはバグではありません) 6日前:https://github.com/hadley/dplyr/issues/1554 – clbieganek