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

使用R语言目标编码函数报错:replacement has length zero

问题:目标编码函数在自有数据集触发replacement has length zero错误

我使用rbloggers上的目标编码函数:

function(x, y, sigma = NULL) {
  d <- aggregate(y, list(factor(x, exclude = NULL)), mean, na.rm = TRUE)
  m <- d[is.na(as.character(d[, 1])), 2]
  l <- d[, 2]
  names(l) <- d[, 1]
  l <- l[x]
  l[is.na(l)] <- m
  if (!is.null(sigma)) {
    l <- l * rnorm(length(l), mean = 1, sd = sigma)
  }
  l
}

该函数在示例数据上运行正常:

data1 <- data.frame(factor_var = c("a", "a", "a", "a", "b", "b"),
                    target = c(TRUE, FALSE, FALSE, TRUE, FALSE, FALSE))

输出结果:

> l
  a   a   a   a   b   b 
0.5 0.5 0.5 0.5 0.0 0.0

但应用到自有数据集时,出现错误:

Error in l[is.na(l)] <- m : replacement has length zero

错误触发于l[is.na(l)] <- m,此时m为空数值类型。我的数据集结构如下:

structure(c(2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L), levels = c("Albania_Albanian Cup", 
"Albania_Superliga", "Argentina_Copa Argentina", "Argentina_Copa de la Superliga"), class = "factor")

错误原因

你的数据集是包含未出现因子水平的因子变量(比如Albania_Albanian Cup和Argentina_Copa de la Superliga这两个水平在当前数据中没有实例),当函数执行l <- l[x]时,这些未出现的水平会被引入并生成NA值。而原函数中m仅提取x中NA值对应的分组均值,但你的x里没有NA,导致m为空,最终替换NA时出现长度不匹配的错误。

原函数的m设计仅处理x中的NA值,无法覆盖因子未出现水平产生的NA。


修复方案

修改函数,让m计算目标变量y的全局均值,用来替换所有类型的NA(包括因子未出现水平产生的NA):

target_encoding <- function(x, y, sigma = NULL) {
  # 计算各因子水平的目标均值
  d <- aggregate(y, list(factor(x, exclude = NULL)), mean, na.rm = TRUE)
  # 计算全局目标均值(作为NA的默认替换值)
  m <- mean(y, na.rm = TRUE)
  l <- d[, 2]
  names(l) <- d[, 1]
  # 匹配输入x的取值,未匹配项生成NA
  l <- l[x]
  # 用全局均值替换所有NA
  l[is.na(l)] <- m
  # 可选:添加噪声防止过拟合
  if (!is.null(sigma)) {
    l <- l * rnorm(length(l), mean = 1, sd = sigma)
  }
  l
}

验证示例

用你的数据集测试(假设目标变量y为对应长度的数值向量):

x <- structure(c(2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L), levels = c("Albania_Albanian Cup", 
"Albania_Superliga", "Argentina_Copa Argentina", "Argentina_Copa de la Superliga"), class = "factor")
y <- c(1,0,1,0,1,0,1,0,0,0)

target_encoding(x, y)

此时未出现的因子水平对应的NA会被全局均值替换,不会再触发错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 20:02:20