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

为何R语言cor()函数在该数据集上报错?求正确用法

问题描述

给定如下数据集:

library(tidyverse)
dat <- structure(list(truth.agg = c(5, 4, 4, 8, 3, 2, 3, 8, 6, 8, 9, 
8, 7, 6, 8, 8, 8, 8, 8, 9, 8, 8, 9, 8, 8, 8, 5, 7, 9, 5), .pred = c(4.73240566253662, 
4.73240566253662, 4.73240566253662, 5.15031337738037, 2.28486394882202, 
4.60455703735352, 4.60455703735352, 8.46518325805664, 5.62833499908447, 
7.93664407730103, 7.9920597076416, 8.2073917388916, 7.03494453430176, 
6.60951709747314, 7.9366512298584, 8.44983863830566, 7.17515993118286, 
7.9701943397522, 7.94902610778809, 8.11329460144043, 7.66316652297974, 
7.51529359817505, 8.374342918396, 8.19860172271729, 7.70432281494141, 
7.67850542068481, 4.99736976623535, 6.99806356430054, 8.00393962860107, 
6.09957933425903)), row.names = c(NA, -30L), class = c("tbl_df", 
"tbl", "data.frame"))

数据集预览:

> dat
# A tibble: 30 × 2
   truth.agg .pred
       <dbl> <dbl>
 1         5  4.73
 2         4  4.73
 3         4  4.73
 4         8  5.15
 5         3  2.28
 6         2  4.60
 7         3  4.60
 8         8  8.47
 9         6  5.63
10         8  7.94
# … with 20 more rows
# ℹ Use `print(n = ...)` to see more rows

执行相关性计算代码cor(dat$truth.agg, dat$.pred)时,出现报错:

> cor(dat$truth.agg, dat$.pred)
Error in cor(dat$truth.agg, dat$.pred) : unused argument (dat$.pred)
报错原因

这个错误源于加载了caret包——caret包中的cor()函数参数逻辑和基础R的cor()不同,它仅接受单个数据框作为输入,不支持直接传入两个向量参数,因此会提示"unused argument"。

正确处理方式

有三种可行的解决办法:

  • 方法1:指定使用基础R的cor函数
    明确调用基础包的函数,避免和caret的函数冲突:

    stats::cor(dat$truth.agg, dat$.pred)
    
  • 方法2:适配caret的cor函数参数要求
    如果要使用caret的cor函数,传入整个数据框即可计算所有列的相关性:

    cor(dat)
    

    或者指定目标列:

    cor(dat[, c("truth.agg", ".pred")])
    
  • 方法3:卸载caret包
    若暂时不需要caret包,可卸载它,之后cor()会默认使用基础R版本:

    detach("package:caret", unload = TRUE)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 04:00:58