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

R语言板球分析CSV读取时dplyr::select_函数报错求助

解决dplyr::select_()调用时的列选择错误

嘿,我来帮你搞定这个R语言的小问题!

首先得搞清楚你出错的原因:你用dplyr::select_()的时候,传入的T1$Runs.Scored是这一列的实际数值向量,但select_()(以及现代的select())函数需要的是列名(字符串)或者列的位置索引(整数),它把你传入的数值当成列索引来解析,自然就会抛出“Each argument must yield either positive or negative integers”的错误——毕竟你那列的得分数据不可能都是有效的列索引嘛!

而T1$Runs.Scored能正常工作,是因为$操作符的作用就是直接提取数据框某一列的向量值,和select系列函数“选择数据框的列(返回子数据框)”的用途完全不同。

接下来给你几个正确的解决方案:

方案1:使用select_()的正确写法(不推荐,因为该函数已被弃用)

如果你暂时还想用旧的select_(),需要传入列名的字符串或者列的位置:

  • 传入列名字符串:
    dplyr::select_(T1, "Runs.Scored")
    
  • 传入列的位置索引(假设Runs.Scored是第3列):
    dplyr::select_(T1, 3)
    

方案2:使用dplyr现代语法(推荐)

现在dplyr已经不推荐使用带下划线的select_()这类旧版NSE函数了,更建议用标准的select(),写法更直观:

  • 直接写列名(最常用):
    dplyr::select(T1, Runs.Scored)
    
  • 如果你的列名存在变量里,用{{}}来引用:
    target_col <- "Runs.Scored"
    dplyr::select(T1, {{target_col}})
    
  • 或者用all_of()来精准匹配字符串列名:
    dplyr::select(T1, all_of("Runs.Scored"))
    

运行这些正确的代码后,你会得到一个只包含Runs.Scored列的子数据框,和T1$Runs.Scored返回的向量不同,但这是select函数的预期行为——它用来筛选数据框的列,而不是提取向量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:33:00