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更新了答案。我之前误解了你的需要。