R语言:如何对索引命名向量求和?循环求和报错求助
问题解决方法
1. 修复你的循环代码
你出错的原因是paste("x_", i)生成的是字符串(比如"x_1"),而sum()函数需要数值向量,不能直接对字符串求和。可以用get()函数把字符串转换成对应的变量:
# 先初始化空向量存储结果 sumxi <- numeric(200) for (i in 1:200){ sumxi[i] <- sum(get(paste("x_", i, sep = ""))) }
get()会根据字符串找到对应的变量,再传入sum()完成计算。
2. 更规范的做法:用列表管理同类型向量
单独创建200个命名相似的向量并非R的最佳实践,建议一开始就把这些向量放进列表,后续操作会更高效:
# 一次性生成包含200个向量的列表 x_list <- lapply(1:200, function(i) runif(1000, min = 0, max = 1)) # 对列表内每个向量求和,结果为数值向量 sumxi <- sapply(x_list, sum)
用列表管理可避免零散变量混乱,遍历、修改操作都更便捷。
处理命名相似变量的核心技巧
- 若已存在大量命名相似的变量,可通过
ls(pattern = "^x_")匹配所有以x_开头的变量名,再用mget()转换为列表:# 获取所有x_开头的变量名 var_names <- ls(pattern = "^x_") # 转换为列表 x_list <- mget(var_names) # 批量求和 sumxi <- sapply(x_list, sum) - 尽量避免直接用
get()调用零散变量,变量数量较多时,列表是R管理同类型对象的标准方式。
内容的提问来源于stack exchange,提问作者Tacos al pastor
相关产品推荐
相关产品推荐

