R语言for循环赋值转换字符矩阵为double类型不生效问题
赋值操作未生效的原因
- 多余的
paste()函数抵消了类型转换效果:as.double(pollution_ds[el,i])已经将单个字符值转换为了double类型,但后续调用的paste()会把任意输入的数值强制转换为字符串类型,你最终赋值给矩阵的还是字符值,相当于类型转换操作完全没有生效。 - R矩阵的同类型约束限制了单个元素的类型修改:矩阵是R中的同质数据结构,要求所有元素的存储类型完全一致。只要整个
pollution_ds矩阵的基础类型还是CHARACTER,你单独给某个位置赋值double值时,R会自动把这个double值强制转换为字符类型再存入,因此你查看元素类型时还是会得到CHARACTER的结果。
推荐的修正方案
不需要编写嵌套for循环处理,直接对目标区域批量做类型转换即可,执行效率更高且不会出现类型回退的问题:
# 仅转换指定行/列范围的元素为double类型 pollution_ds[4:269, 5:66] <- apply(pollution_ds[4:269, 5:66], 2, as.double) # 如果需要将整个矩阵转换为double类型,写法更简单 pollution_ds <- matrix(as.double(pollution_ds), nrow = nrow(pollution_ds), dimnames = dimnames(pollution_ds))
内容的提问来源于stack exchange,提问作者Diego Rando
相关产品推荐
相关产品推荐

