Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R中的累积pnorm_R_Data.table - Fatal编程技术网

R中的累积pnorm

R中的累积pnorm,r,data.table,R,Data.table,我希望通过as系列计算累积的pnorm set.seed(10) df = data.frame(sample = rnorm(10)) # head(df) # sample # 1 0.01874617 # 2 -0.18425254 # 3 -1.37133055 # 4 -0.59916772 # 5 0.29454513 # 6 0.38979430 我希望结果是 # na # 0.2397501 # last value of pnorm(df$sample[1:2]

我希望通过as系列计算累积的
pnorm

set.seed(10)
df = data.frame(sample = rnorm(10))
# head(df)
#   sample
# 1  0.01874617
# 2 -0.18425254
# 3 -1.37133055
# 4 -0.59916772
# 5  0.29454513
# 6  0.38979430
我希望结果是

# na
# 0.2397501   # last value of pnorm(df$sample[1:2],mean(df$sample[1:2]),sd(df$sample[1:2]))
# 0.1262907   # last value of pnorm(df$sample[1:3],mean(df$sample[1:3]),sd(df$sample[1:3]))
# 0.4577793    # last value of pnorm(df$sample[1:4],mean(df$sample[1:4]),sd(df$sample[1:4]))
# .
# .
# .
如果我们能在data.table中更好地实现这一点,那就太好了

您可以执行以下操作:

set.seed(10)
df = data.frame(sample = rnorm(10))

foo <- function(n, x) {
  if (n==1) return(NA)
  xn <- x[1:n]
  tail(pnorm(xn, mean(xn), sd(xn)), 1)
}

sapply(seq(nrow(df)), foo, x=df$sample)

最后你可以做类似的事情,我认为你有一个语法错误,这应该是
pnorm(df$sample[1:2],mean(df$sample[1:2]),sd(df$sample[1:2]),
等等(你已经将mean和sd组合在一起了)。非对等连接:
df[,rid:=.I][(rid=rid),on=(rid
不过,这个计算似乎很奇怪/没有用。如果你首先计算累积平均值和标准偏差COL,不管怎样,它的效率可能会低得多。或者干脆把它像
c(NA,sappy(2:10,函数(i)tail(pnorm(df$sample[1:i],mean(df$sample[1:i]),标准偏差(df$sample[1:i]),1)一样砸在一起。
#> sapply(seq(nrow(df)), foo, x=df$sample)
# [1]         NA 0.23975006 0.12629071 0.45777934 0.84662051 0.83168998 0.11925118 0.50873996 0.06607348 0.63103339You can put the result in your dataframe:

df$result <- sapply(seq(nrow(df)), foo, x=df$sample)
c(NA, sapply(2:10, function(i) tail(pnorm(df$sample[1:i], mean(df$sample[1:i]), sd(df$sample[1:i])), 1)))