Ответ 1
Краткий ответ
Майк, твоя команда действительна, но для пакета "plyr". Если вы загрузите "dplyr" в тот же скрипт, вы получите ошибку, о которой вы упоминали.
Следовательно, попробуйте вместо этого:
library("plyr")
d <- data.frame(alpha=1:3, beta=4:6, gamma=7:9)
d <- plyr::rename(d, c("beta"="two", "gamma"="three"))
Некоторые дополнительные мысли, чтобы лучше понять проблему
1) search()
Можно использовать функцию search()
, чтобы узнать порядок, в котором R ищет функции/объекты.
В приведенном ниже примере, кроме предупреждений, которые вы получаете при загрузке двух пакетов с одинаковыми именами функций, вы можете вызвать search()
, чтобы понять, что R будет сначала искать функции в ".GlobalEnv" (среде по умолчанию при запуске R), затем в "package: dplyr", а затем в "package: plyr" и так далее. Таким образом, вы получаете сообщение об ошибке, потому что R думает, что вы хотите использовать функцию rename()
из пакета dplyr
(который имеет приоритет над plyr
, потому что загружен совсем недавно).
И да, верно, что изменение порядка загрузки пакетов также решает проблему, но это не является обнадеживающим решением - например, коллега, с которым вы делитесь кодом, не подозревая об ошибке, может легко изменить порядок и все снова встанет; или твоя будущая личность, забыв о "починке", снова попадает в ту же ловушку - часто случается со мной: D
library(plyr)
library(dplyr)
#>
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:plyr':
#>
#> arrange, count, desc, failwith, id, mutate, rename, summarise,
#> summarize
#> The following objects are masked from 'package:stats':
#>
#> filter, lag
#> The following objects are masked from 'package:base':
#>
#> intersect, setdiff, setequal, union
search()
#> [1] ".GlobalEnv" "package:dplyr" "package:plyr"
#> [4] "package:stats" "package:graphics" "package:grDevices"
#> [7] "package:utils" "package:datasets" "package:methods"
#> [10] "Autoloads" "package:base"
d <- data.frame(alpha=1:3, beta=4:6, gamma=7:9)
rename(d, c("beta"="two", "gamma"="three"))
#> All arguments must be named
Created on 2019-04-20 by the reprex package (v0.2.1)
2) "конфликтный" пакет для спасения
Такие ошибки относительно распространены, поэтому конфликтующий пакет может быть очень удобен здесь. После загрузки вы можете ввести имя функции, которая дает вам ошибки, и вы получите некоторую полезную информацию, чтобы помочь вам отладить проблему - проверьте этот пример ниже:
library(conflicted)
library(plyr)
library(dplyr)
rename
#> [conflicted] 'rename' found in 2 packages.
#> Either pick the one you want with '::'
#> * dplyr::rename
#> * plyr::rename
#> Or declare a preference with 'conflict_prefer()'
#> * conflict_prefer("rename", "dplyr")
#> * conflict_prefer("rename", "plyr")
Created on 2019-04-20 by the reprex package (v0.2.1)