下面是我在网上找到的一个非常简单的 Dataframe 示例。在我的机器上运行RStudio会出现一个错误消息:
错误:所有要重命名的参数都必须命名。rename
函数看起来很简单,但由于某些原因不起作用,我不知道为什么。
library("dplyr")
d <- data.frame(alpha=1:3, beta=4:6, gamma=7:9)
d
# alpha beta gamma
# 1 1 4 7
# 2 2 5 8
# 3 3 6 9
rename(d, c("beta"="two", "gamma"="three"))
#Error: All arguments to rename must be named.
9条答案
按热度按时间ecfdbz9o1#
简短回答
迈克,你的命令是有效的,但“plyr”包。如果你加载“dplyr”在同一脚本,你会得到你提到的错误。
因此,请尝试以下操作:
一些额外的想法,以更好地理解问题
1)
search()
可以使用函数
search()
找出R搜索函数/对象的顺序。在下面的例子中,除了在加载两个具有相同函数名的包时会收到警告外,你还可以调用
search()
来意识到R会先在.“GlobalEnv”(启动R时的默认环境)中查找函数,然后在“package:dplyr”中查找,再在“package:plyr”中查找,以此类推。所以你会收到错误消息是因为R认为你想使用dplyr
包中的rename()
函数(因为dplyr
包是最近加载的,所以它的优先级高于plyr
)。是的,改变你加载包的顺序也能解决问题,但这不是一个鼓励的解决方案--例如,一个和你分享代码的同事,不知道bug,可以很容易地改变顺序,事情又会发生变化;或者你未来的自我,忘记了“修复”,再次福尔斯同样的陷阱-经常发生在我身上:D
由reprex package(v0.2.1)于2019年4月20日创建
2)要救援的“冲突”包
这样的错误比较常见,所以conflicted包在这里非常方便。一旦加载,你可以输入给你错误的函数的名字,你会得到一些有用的信息来帮助你调试这个问题--看看下面的例子:
由reprex package(v0.2.1)于2019年4月20日创建
xhv8bpkk2#
现有列名和新列名必须使用不带引号的名称。另外,请注意,新名称显示在左手。
试试这个:
8cdiaqws3#
当我试图对分组数据集使用rename_all时,也遇到了这个错误。
例如:
将产生OP所述的错误。
要解决此问题,请使用ungroup()
kzipqqlq4#
我自己也是偶然发现这个问题的,所以我想我应该分享一个解决方案。
您的代码中有两个问题。第一个问题(导致错误的原因)是
dplyr::rename
要求参数作为var args传递,而不是作为单个列表传递。换句话说,它应该是:如果要动态执行此操作,可以使用do.call,如下所示:
但是,另一个问题是,您的重命名是向后的。键应该是新的列名,值应该是旧的列名。因此,您需要这样做:
使用rlang的
!!!
运算符:但是,如果您事先知道列,则可以使用第一个示例。
brqmpdu15#
如果你用的是dplyr而不是plyr,语法就会略有不同。我遇到了这个麻烦,用以下方法解决了它:
df <- df %>% rename(new_name=old_name)
或者在您的情况下:
yqyhoc1h6#
即使这个问题是旧的,它已经得到了回答,我也面临着同样的问题。安装“重塑”包为我修复了这个问题。
现在,下面的代码应该可以正常工作。
af7jpaap7#
同样的问题,并尝试了许多早期的建议,但唯一有效的是重新启动R/RStudio。我应该更多地作为默认。
cxfofazt8#
我在使用dplyr rename()函数时遇到了一个问题,该函数的格式如下
并得到一个错误
我通过将代码更改为
也许这只是一个简单的包屏蔽问题。这不是对原始问题的直接回答,但希望它能帮助任何收到类似错误消息的人,因为他们寻找修复可能会导致他们找到这个线程(就像我一样)。
5lhxktic9#
我遇到了这个问题,并解决了它使用: