R 错误:在data.table中创建多个变量时,较长的对象长度不是较短对象长度的倍数

R 错误:在data.table中创建多个变量时,较长的对象长度不是较短对象长度的倍数,r,data.table,R,Data.table,我试图在一个命令中在data.table中创建多个列,因为逻辑很简单。我有一列起始值a0,需要通过简单地向下一列添加常量来创建时间演化 这是一个可复制的例子 dt <- data.table(a0 = c(0.3, 0.34, 0.45, 0.6, 0.37, 0.444)) dt[, paste0('a', 1:5) := a0 + 1:5 / 4] 看起来R的计算维度不对。尝试添加列表dt[,paste0('a',1:5):=list(a0+1:5/4)],但没有成功。您收到警告,

我试图在一个命令中在
data.table
中创建多个列,因为逻辑很简单。我有一列起始值
a0
,需要通过简单地向下一列添加常量来创建时间演化

这是一个可复制的例子

dt <- data.table(a0 = c(0.3, 0.34, 0.45, 0.6, 0.37, 0.444))

dt[, paste0('a', 1:5) := a0 + 1:5 / 4]

看起来R的计算维度不对。尝试添加列表
dt[,paste0('a',1:5):=list(a0+1:5/4)]
,但没有成功。

您收到警告,因为
长度(dt$a0)
是6,而
长度(1:5)
是5

dt$a0 + 1:5
#[1] 1.300 2.340 3.450 4.600 5.370 1.444
警告信息: 在dt$a0+1:5中: 较长的对象长度不是较短对象长度的倍数

此处,
1:5
的第一个值被回收并添加到
dt$a0[6]

不能像那样直接引用上一列。在这种情况下,如果要基于先前的列值添加新列,可以执行以下操作

library(data.table)
n <- 5
dt[, paste0('a', seq_len(n)) := lapply(seq_len(n)/4, function(x) x + a0)]

dt
#      a0    a1    a2    a3    a4    a5
#1: 0.300 0.550 0.800 1.050 1.300 1.550
#2: 0.340 0.590 0.840 1.090 1.340 1.590
#3: 0.450 0.700 0.950 1.200 1.450 1.700
#4: 0.600 0.850 1.100 1.350 1.600 1.850
#5: 0.370 0.620 0.870 1.120 1.370 1.620
#6: 0.444 0.694 0.944 1.194 1.444 1.694
库(data.table)

n得到警告是因为
长度(dt$a0)
是6,而
长度(1:5)
是5

dt$a0 + 1:5
#[1] 1.300 2.340 3.450 4.600 5.370 1.444
警告信息: 在dt$a0+1:5中: 较长的对象长度不是较短对象长度的倍数

此处,
1:5
的第一个值被回收并添加到
dt$a0[6]

不能像那样直接引用上一列。在这种情况下,如果要基于先前的列值添加新列,可以执行以下操作

library(data.table)
n <- 5
dt[, paste0('a', seq_len(n)) := lapply(seq_len(n)/4, function(x) x + a0)]

dt
#      a0    a1    a2    a3    a4    a5
#1: 0.300 0.550 0.800 1.050 1.300 1.550
#2: 0.340 0.590 0.840 1.090 1.340 1.590
#3: 0.450 0.700 0.950 1.200 1.450 1.700
#4: 0.600 0.850 1.100 1.350 1.600 1.850
#5: 0.370 0.620 0.870 1.120 1.370 1.620
#6: 0.444 0.694 0.944 1.194 1.444 1.694
库(data.table)

n修改
lappy(序列(5),函数(x)a0+x/4)
实现了我所做的wanted@user2761282更新了答案。我误解了您之前需要的内容。修改
lappy(seq_len(5),函数(x)a0+x/4)
实现了我想要的功能wanted@user2761282更新了答案。我之前误解了你的需要。