在r中的函数中生成样本数据而不重复

在r中的函数中生成样本数据而不重复,r,random,R,Random,我有以下可复制代码: x <- as.data.table(c(1:20)) samplefunction <- function(x) { if(x <= 10 ) { sample(35:45) }else if(x > 10) { sample(50:60) } } day1 <- x[,sales := sapply(x, samplefunction)] day2 <- x[,sales := sapply(x, samplefunction

我有以下可复制代码:

x <- as.data.table(c(1:20))
samplefunction <- function(x) { 
if(x <= 10 ) { 
sample(35:45)
}else if(x > 10) { 
sample(50:60)
}
}

day1 <- x[,sales := sapply(x, samplefunction)]
day2 <- x[,sales := sapply(x, samplefunction)]

x您的意思可能是在示例函数中
sample(35:45,1)
sample(50:60,1)
?但是你被data.table的“引用”语义所吸引,而你习惯了R的“更改时复制”语义——day1和day2都引用相同的data.table x,所以当你更新day2的销售额时,你更新了day1。如果您使用了标准数据帧(您需要
library(data.table)
才能重现您的示例!),您会看到您实际上生成了两个独立的序列,并且第1天和第2天实际上是不同的。我发现通过使用:=运算符将函数应用于单独的列,可以更轻松地将列添加到data.table。有没有一种简单的方法可以在一个数据帧内实现这一点?如果是这样,我可以将语法更改为只使用data.frames,并删除对data.tables.day1的引用