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

如何将R语言的数字求和函数向量化以处理数字向量?

向量化实现R语言数字向量的各位数字求和函数

当然可以实现无需遍历元素的向量化版本,以下提供两种高效的向量化解决方案:

方法一:纯数学运算实现

基于你找到的单元素函数思路,通过矩阵运算实现完全向量化:

vector_digitsum <- function(x) {
  # 获取每个数字的位数
  digit_counts <- nchar(x)
  # 生成每个数字对应的10的幂次矩阵(超出位数的位置用NA填充)
  power_matrix <- 10^(outer(0:max(digit_counts - 1), seq_along(x), 
                            function(p, idx) if (p < digit_counts[idx]) p else NA))
  # 计算各位数字并求和,忽略NA值
  rowSums(floor(x / power_matrix) %% 10, na.rm = TRUE)
}

测试示例:

test_vec <- c(1, 11, 1232, 4221, 2)
vector_digitsum(test_vec)
# 输出结果:[1] 1 2 8 9 2

这个方法通过outer()生成适配每个数字位数的幂次矩阵,利用R的向量化运算特性完成批量计算,完全避免了逐个元素遍历。

方法二:字符串处理实现

利用字符串拆分的向量化特性,代码更简洁直观:

vector_digitsum_str <- function(x) {
  # 将数字转为字符串并拆分,返回矩阵格式
  digit_matrix <- strsplit(as.character(x), "", simplify = TRUE)
  # 转换为整数矩阵后按行求和
  rowSums(as.integer(digit_matrix))
}

测试示例:

vector_digitsum_str(test_vec)
# 输出结果:[1] 1 2 8 9 2

strsplit()的simplify=TRUE参数会返回一个行数与输入向量长度一致的矩阵,后续的类型转换和行求和都是纯向量化操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 15:02:17