从模拟变量

问题描述

我有一个像这样的数据集:

library(data.table)
library(EnvStats)
library(bayestestR)

DT <- data.table(MEAN = c(0.5,0.7,0.9),MIN = c(0.4,0.6,0.8),MAX = c(0.6,0.8,1),REF = rnorm(3,1000,200))

我用变量MEANMINMAX中的模拟值计算出一个变量。

DT[,Sim_rtri := list(REF*(1+rtri(n = 1000,min = MIN,max = MAX,mode = MEAN)))]

但是即使我需要模拟为每一行取值,我也为每一行获得相同的值。我该怎么办?

而且,我想使用两个var,一个是var Sim_rtri的平均值,另一个是该var的间隔,我尝试过:

DT[,Mean_Sim_rtri := mean(Sim_rtri)]
DT[,Int_Sim_rtri := ci(Sim_rtri,method = "ETI",ci = .95)]

但是我从中得到了错误。我还能做什么?

解决方法

当您不分配第一行代码时,它将变得更加清晰:

set.seed(42)
DT <- data.table(MEAN = c(0.5,0.7,0.9),MIN = c(0.4,0.6,0.8),MAX = c(0.6,0.8,1),REF = rnorm(3,1000,200))
DT[,list(REF*(1+rtri(n = 1000,min = MIN,max = MAX,mode = MEAN)))]
            V1
   1: 1946.223
   2: 1465.333
   3: 2056.410
   4: 1940.845
   5: 1504.171
  ---         
 996: 1968.724
 997: 1962.222
 998: 1511.566
 999: 2037.884
1000: 1810.734
Warning message:
In REF * (1 + rtri(n = 1000,mode = MEAN)) :
  longer object length is not a multiple of shorter object length

它正在创建一个长度为1000的列表,而不是3个列表列(每个为1000),因为它正在回收data.table中的值(请注意{{的 general 模式1}}是〜V1。无论如何,也许有一种更惯用的方法/ 1900...1500...2000解决问题,但是使用data.table是否更符合您的预期结果?>

Map()

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...