You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何names(df)在dplyr::arrange()中无效?如何使其正常工作

问题分析与解决方法

原因

dplyr的arrange()函数默认要求传入裸列名(比如直接写arrange(mpg, cyl)),而你传入的是存储列名的字符向量nam。此时arrange()会把nam当成一个独立的向量处理,不会将其解析为要排序的列名,自然无法按预期对mtcars的列进行排序。

解决办法

有三种常用方式可以让代码正常工作:

方式一:使用.data代词结合解引用操作符!!!

利用.data代词引用字符向量对应的列,再通过!!!将字符向量中的每个列名拆分为arrange()的独立参数:

nam <- names(mtcars)
mtcars2 <- mtcars %>% arrange(!!!.data[nam])

方式二:使用across()配合all_of()

通过across()指定要排序的列范围,all_of()用来精准匹配字符向量中的列名:

nam <- names(mtcars)
mtcars2 <- mtcars %>% arrange(across(all_of(nam)))

方式三:用rlang包的syms()转换为符号后解引用

先将字符向量转换为R语言的符号对象,再通过!!!解引用传入arrange():

library(rlang)
nam <- names(mtcars)
mtcars2 <- mtcars %>% arrange(!!!syms(nam))

内容的提问来源于stack exchange,提问作者jkatam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 16:40:31