Dplyrパッケージの例の1つをこのエラーメッセージで再現しようとしています。各組み合わせの頻度で新しい列nが生成されることを期待しています。誰かが私に欠けていることを教えてもらえますか?パッケージがロードされていることをトリプルチェックしました。いつものように、助けてくれてありがとう。
library(dplyr)
# summarise peels off a single layer of grouping
by_vs_am <- group_by(mtcars, vs, am)
by_vs <- summarise(by_vs_am, n = n())
n()のエラー:この関数は直接呼び出さないでください
同じセッションでdplyr
とplyr
がロードされていると思います。 dplyr
はplyr
ではありません。 ddply
は、dplyr
パッケージの関数ではありません。
dplyr
とplyr
の両方に、summarise
/summarize
という関数があります。
conflicts()
の結果を見て、マスクされたオブジェクトを確認してください。
前の回答で述べたように、plyrとdplyrの間に矛盾があるかもしれません。このコマンドを実行して、plyrパッケージをアンロードできます。
detach("package:plyr", unload=TRUE)
その後、期待どおりに続行できます。
library(dplyr)
...
summarise(n = n())
マスキング関数との混乱を避けるために、以下の例のように「package :: function」仕様を使用することは明らかです。
delay <- dplyr::summarise(by_tailnum,
count = n(),
dist = mean(distance, na.rm = TRUE),
delay = mean(arr_delay, na.rm = TRUE))
別のケースでは、このエラーは次のコードで発生しました。
library(dplyr) # dplyr 0.5.0
library(lazyeval)
df <- data_frame(group = c(1, 2, 2, 3, 3, 3))
g <- "group"
df %>%
group_by_(g) %>%
summarise_(
n = n(),
sum = interp(~sum(col, na.rm = TRUE), col = as.name(g))
)
# Error in n() : This function should not be called directly
次のように解決できます。
df %>%
group_by_(g) %>%
summarise_(
n = "n()",
sum = interp(~sum(col, na.rm = TRUE), col = as.name(g))
)
# A tibble: 3 × 3
# group n sum
# <dbl> <int> <dbl>
# 1 1 1 1
# 2 2 2 4
# 3 3 3 9
私にとって解決策はdetach()
関数でした
前述のブログに従ってコードを実行中に同様の問題に直面し、次にdetach( "package:plyr"、unload = TRUE)でソリューションを実行します
ブログ: https://www.analyticsvidhya.com/blog/2017/09/comparative-stock-analysis/
Master_Data_AutoCorrelations<-Master_Data_lags %>%
gather(key = "lag", value = "lag_value", -c(Stock,Date, Close)) %>%
mutate(lag = str_sub(lag, start = 5) %>% as.numeric) %>%
group_by(Stock, lag) %>%
summarize(
cor = cor(x = Close, y = lag_value, use = "pairwise.complete.obs"),
cutoff_upper = 2/(n())^0.5,
cutoff_lower = -2/(n())^0.5
)
実行中のデタッチ、上記のコードが再実行されたとき、以下のように警告メッセージを受け取りましたが、plyrがアンロードされたかどうかわからないが正常に動作しました。そして、コードはどのように正しく実行されますか?
警告メッセージ:「plyr」名前空間はアンロードできません:名前空間「plyr」は「reshape2」、「scales」、「broom」、「ggplot2」によってインポートされるため、アンロードできません