R中data.matrix()结合lapply返回列表及矩阵赋值报错如何解决?
错误原因说明
- 列表索引错误:R中
[操作符用于提取列表的子片段,返回结果仍为列表类型;[[才是提取列表内部的单个元素。你调用class(data3[1])得到list属于正常现象,data.matrix()本身运行正常,调用class(data3[[1]])即可看到返回结果为矩阵类型。你单独测试时的报错也是因为将子列表当作矩阵调用二维索引导致的。 - lapply函数无返回值:你最后一步的自定义函数仅执行了赋值操作,R函数默认返回最后一行代码的运算结果,也就是你赋值的
0,因此data4的所有元素都会变成0。
修改后可直接运行的代码
# 读取当前目录下所有csv文件路径 files <- list.files(pattern="*.csv", full.names=F, recursive=F) # 批量处理所有文件 data_result <- lapply(files, function(x) { # 读取csv文件 df <- read.csv(x, header = F) # 替换NaN为0 df[df == 'NaN'] <- 0 # 转为数值矩阵 mat <- data.matrix(df, rownames.force = NA) # 替换左下区域(43-84行,1-42列)为0 mat[43:84, 1:42] <- 0 # 若需要同时替换右上区域(1-42行,43-84列)为0,取消注释下一行即可 # mat[1:42, 43:84] <- 0 # 返回处理完成的矩阵 return(mat) })
效果验证方法
- 查看单个元素类型:执行
class(data_result[[1]])会返回matrix - 查看替换效果:执行
View(data_result[[1]])可直观查看矩阵数值是否符合预期
内容的提问来源于stack exchange,提问作者Kelly Yoo
相关产品推荐
相关产品推荐

