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

使用R语言预测Top10电影时left_join报错的解决求助

R语言Top10电影预测代码错误排查

你遇到的错误信息如下:

Error in UseMethod("left_join") :
no applicable method for 'left_join' applied to an object of class "c('matrix', 'array', 'integer', 'numeric')"

错误原因

dplyr的left_join函数仅支持数据框(data frame)或tibble类型的输入对象。报错说明test_set、b_i或b_u中的至少一个是矩阵、数组这类非数据框结构,导致left_join无法识别处理。

解决步骤

1. 检查并转换对象类型

先通过class()函数确认每个对象的类型:

class(test_set)
class(b_i)
class(b_u)

如果输出是matrix或array,用as.data.frame()转换为数据框,同时确保关键连接列(movieId、userId)的列名正确:

# 转换b_i为数据框,根据实际数据结构调整列名
b_i <- as.data.frame(b_i)
colnames(b_i) <- c("movieId", "b_i") # 替换为你的实际列名

# 转换b_u为数据框
b_u <- as.data.frame(b_u)
colnames(b_u) <- c("userId", "b_u")

# 确保test_set是数据框类型
test_set <- as.data.frame(test_set)

2. 修正后的完整代码

# 先完成对象类型转换(列名根据你的实际数据调整)
test_set <- as.data.frame(test_set)
b_i <- as.data.frame(b_i)
colnames(b_i) <- c("movieId", "b_i")
b_u <- as.data.frame(b_u)
colnames(b_u) <- c("userId", "b_u")

# 生成Top10预测电影列表
top10_prediction_linear <- test_set %>%
  left_join(b_i, by = "movieId") %>%
  left_join(b_u, by = "userId") %>%
  mutate(y_hat = mu + b_i + b_u) %>%
  arrange(desc(y_hat)) %>%
  select(title) %>%
  unique() %>%
  slice_head(n = 10)

# 用dplyr聚合替代循环,更高效简洁
top10_prediction_linear_df <- test_set %>%
  filter(title %in% top10_prediction_linear$title) %>%
  group_by(title) %>%
  summarise(
    Rating = mean(rating, na.rm = TRUE),
    Count = n()
  ) %>%
  right_join(data.frame(title = top10_prediction_linear$title), by = "title") %>%
  rename(Title = title) %>%
  select(Title, Rating, Count)

print(top10_prediction_linear_df)

额外说明

  • 转换数据框时,一定要确认列名和连接键(movieId、userId)一致,否则left_join会因找不到匹配列报错。
  • 用dplyr的分组聚合替代原代码中的循环,不仅代码更简洁,还能避免手动索引带来的错误,同时处理NA值(通过na.rm = TRUE)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 03:42:38