PAYATHON 2026

如何在 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,不适合用于可能需要零长度结果的场景。

备注:内容仅供参考。