简短回答
Mike,你的命令是正确的,但要使用 "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认为您要使用dplyr
包中的rename()
函数(该函数具有优先级高于plyr
,因为它是最近加载的)。
是的,改变加载包的顺序可以解决问题,但这不是鼓励的解决方案-例如,与您共享代码但不知道存在错误的同事可以轻松更改顺序,然后再次发生问题;或者您自己在将来忘记了“修复”而再次陷入同样的陷阱-这种情况经常发生 :D
library(plyr)
library(dplyr)
search()
d <- data.frame(alpha=1:3, beta=4:6, gamma=7:9)
rename(d, c("beta"="two", "gamma"="three"))
本内容由reprex包(v0.2.1)于2019-04-20创建
2) "conflicted" 包的应用
这种错误相对常见,因此conflicted包非常有用。一旦加载,您可以输入出现错误的函数名称,该包将提供一些有用的信息来帮助您调试问题 - 请参考下面的示例:
library(conflicted)
library(plyr)
library(dplyr)
rename
2019年04月20日由reprex包 (v0.2.1)创建
plyr
和dplyr
并尝试使用rename()
命令时,我会收到这个错误提示。 我通过使用plyr:: rename()
来避免此问题。 - coip