cor()函数在R控制台运行正常,编织RMD为HTML时出错求助
问题:R控制台计算相关性正常,但RMD编织HTML时报错
1. 控制台运行情况
在R控制台执行以下代码,可得到0.57的输出结果:
cor(days_sleep_tracking$TotalMinutesAsleep, days_sleep_tracking$count_days_sleep_tracking , method = "spearman")
2. RMD编织报错信息
将RMD文件编织为HTML时,出现以下错误及警告:
Error in cor(days_sleep_tracking$TotalMinutesAsleep, days_sleep_tracking$count_days_sleep_tracking, : supply both 'x' and 'y' or a matrix like 'x' Calls: <Anonymous> ... withVisible -> eval_with_user_handlers -> eval -> eval -> cor In addition: Warning message: Expected 2 pieces. Additional pieces discarded in 413 rows[1,2,...] Execution halted
3. 数据样例
| count_days_sleep_tracking (int) | TotalMinutesAsleep (dbl) |
|---|---|
| 25 | 360.2800 |
| 4 | 294.000 |
| 3 | 652.000 |
| 5 | 417.0000 |
已排查项
- 确认RMD文件中已加载
stats库 - 相同代码用于另一张表时,编织流程可正常完成
- 初步怀疑问题与表结构或数据类型相关,但未发现明显差异
解决方案建议
1. 验证数据加载的一致性
检查R控制台与RMD编织时的工作目录和数据导入逻辑是否一致:
- RMD默认工作目录是其所在文件夹,而控制台可能使用不同路径,导致加载的数据不完整或格式异常。可在RMD代码块中添加
getwd()确认路径,或使用绝对路径加载数据。
2. 检查变量的有效性
在执行cor的代码块前,添加以下代码查看数据状态:
# 查看数据结构 str(days_sleep_tracking) # 查看变量统计信息 summary(days_sleep_tracking$TotalMinutesAsleep) summary(days_sleep_tracking$count_days_sleep_tracking) # 检查是否存在NA值 sum(is.na(days_sleep_tracking$TotalMinutesAsleep)) sum(is.na(days_sleep_tracking$count_days_sleep_tracking))
确认两个变量均为数值类型,且无大量NA值或空值导致cor无法识别有效输入。
3. 处理数据导入的分割警告
报错前的警告提示“Expected 2 pieces. Additional pieces discarded”,说明数据导入时存在列分割错误:
- 检查数据导入代码(如
read.csv/read.table)的分隔符参数(sep)是否正确,避免因分隔符设置错误导致某列数据被拆分后丢弃,进而造成变量缺失或格式异常。
4. 显式处理缺失值
在cor函数中添加use = "complete.obs"参数,排除含NA的行,避免缺失值干扰计算:
cor(days_sleep_tracking$TotalMinutesAsleep, days_sleep_tracking$count_days_sleep_tracking, method = "spearman", use = "complete.obs")
5. 确认数据框未被意外修改
检查RMD中执行cor代码前的所有代码,确保days_sleep_tracking数据框未被后续代码清空、修改列名或删除目标列。
内容的提问来源于stack exchange,提问作者Joseph Passant
相关产品推荐
相关产品推荐

