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

使用BGData包chunkedApply函数报错:dimnames[2]长度与数组范围不匹配

BGData::chunkedApply 使用 identity 函数报错的原因与解决方法

报错原因

当使用 chunkedApply 并设置 MARGIN = 1L(按行处理)时,函数默认会尝试将 FUN 的输出简化为矩阵/数组格式。identity 函数返回的是每行的原始向量,而 chunkedApply 内部会自动为结果添加维度名,但分块处理时,维度名的长度与实际结果的维度不匹配,从而触发 dimnames(x) <- dn : length of 'dimnames' [2] not equal to array extent 错误。

而改用 length 函数时,它返回的是单个数值,不会触发维度名匹配逻辑,因此代码可以正常运行。

解决方法

有两种可行的解决方式:

方法1:设置 simplify = FALSE

通过指定 simplify = FALSE,强制 chunkedApply 返回列表格式,避免自动简化为矩阵,这样 identity 函数的输出可以正常保留:

library(BGData)
library(parallel)

subset <- Merged_Data[1:50, 1:50]
n <- 4L
index <- splitIndices(nrow(subset), n)

for (k in seq_len(n)) {
    chunk <- chunkedApply(subset, MARGIN = 1L, FUN = identity, i = index[[k]], simplify = FALSE)
    print(length(chunk))
}

方法2:包装 identity 为返回列表的函数

将 identity 包装在一个返回列表的函数中,让输出以列表形式返回,绕过维度名匹配逻辑:

library(BGData)
library(parallel)

subset <- Merged_Data[1:50, 1:50]
n <- 4L
index <- splitIndices(nrow(subset), n)

for (k in seq_len(n)) {
    chunk <- chunkedApply(subset, MARGIN = 1L, FUN = function(x) list(identity(x)), i = index[[k]])
    print(length(chunk))
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 02:13:12