numeric()与as.numeric()的区别,numeric(5)含义及与Python列表的对比
numeric() 与 as.numeric() 的区别
两者核心作用完全不同:
- numeric(n):用于创建数值型向量,参数
n指定向量的长度,创建出的向量每个元素默认值为0;如果不带参数numeric(),会生成一个长度为0的空数值向量。 - as.numeric(x):用于转换已有对象的类型为数值型,它会尝试把输入的
x(比如字符、因子、逻辑值等)转换成数值格式。
举几个实际例子:
# 创建长度为3的数值向量 create_vec <- numeric(3) create_vec # 输出: [1] 0 0 0 # 把字符向量转成数值向量 char_vec <- c("5", "10", "15") convert_vec <- as.numeric(char_vec) convert_vec # 输出: [1] 5 10 15 # 注意:转换因子时取的是水平索引,不是标签内容 factor_vec <- factor(c("1", "2", "3")) as.numeric(factor_vec) # 输出: [1] 1 2 3
关于numeric(5)的疑问及与Python空列表的对比
1. numeric(5)的含义
括号里的5是指定要创建的数值向量的长度——也就是这个向量初始化后有5个元素位置,每个位置默认值为0。你写的循环里,直接给Storage[i]赋值时,因为向量已经有了对应位置,不需要动态扩展,运行效率更高。
2. 为什么不能直接用numeric()?
直接用numeric()会生成长度为0的空数值向量,虽然循环里赋值时R会自动扩展向量长度,最终结果也是对的,但每次赋值都要重新分配内存、拷贝数据,数据量越大,效率越低。比如:
Storage <- numeric() for(i in 1:5){ Storage[i] <- i^2 } Storage # 结果还是 [1] 1 4 9 16 25,但过程更耗资源
3. 和Python的storage = []等价吗?
不完全等价:
- Python的空列表
[]可以存储任意类型的元素(比如同时存数值、字符串、列表),而R的numeric()生成的是纯数值型的空向量,只能存储数值。 - 如果是Python里用
storage = []然后append数值的场景,对应的R写法更接近用c()动态拼接:
但和预先用Storage <- c() for(i in 1:5){ Storage <- c(Storage, i^2) }numeric(5)分配空间比,这种动态拼接同样存在效率问题。
内容的提问来源于stack exchange,提问作者user19562955
相关产品推荐
相关产品推荐

