如何在 R 中创建每一项都是前一项两倍的向量?
数据小陈
可以对一组连续整数计算 2 的幂,生成序列 1, 2, 4, 8, 16, ...。这些数分别对应 2^0, 2^1, 2^2, 2^3, 2^4, ...,无需逐项计算。
生成指定长度的向量
例如,生成前 10 项:
n <- 10
x <- 2^(seq_len(n) - 1)
x
# [1] 1 2 4 8 16 32 64 128 256 512
seq_len(n) 生成从 1 到 n 的整数序列,减去 1 后得到指数 0 到 n - 1。R 的 ^ 运算会分别计算向量中每个指数对应的幂,从而得到所需序列。
如果只需要示例中的前五项,也可以直接写:
2^(0:4)
# [1] 1 2 4 8 16
为什么不直接使用 rep()?
rep() 用于重复已有的值。例如:
rep(2, times = 5)
# [1] 2 2 2 2 2
它不会自动把前一项乘以 2。这个数列可以用幂运算表达,因此直接使用 2^指数向量 更合适。
设置长度时的注意事项
上述写法要求 n 是非负整数。当 n <- 0 时,seq_len(n) 返回空向量;而 0:(n - 1) 会生成 0, -1,不适合用于可能需要零长度结果的场景。
备注:内容仅供参考。
