我正在尝试编写一个函数,例如为10个模拟的大小为n的向量获取测试统计量。我写了下面的代码,但是我没有得到我需要的结果,我该如何解决?
skw=function(n,nsims){
t=numeric(nsims)
for (i in 1:nsims) {
x=rnorm(n)
t[i]=skwness(x)
zscore=t/(6/n)
return(zscore)
}
}
其中:
skwness=function(x){
n=length(x)
skew.stat=(1/(n))*(1/(sd(x)^3))*(sum((x-mean(x))^3))
return(skew.stat)
}
谢谢!
答案 0 :(得分:1)
你有几个问题。主要的一点是return
应该在for
循环之外。此外,您应将t
和zscore
定义为矢量,并将x
定义为列表。
我认为这会奏效。
旁注:t
在此功能中似乎是不必要的。你可以逃避使用
zscore[i] <- skwness(x[[i]])/(6/n)
并一起摆脱t
skwness <- function(x){
n <- length(x)
skew.stat <- (1/(n))*(1/(sd(x)^3))*(sum((x-mean(x))^3))
return(skew.stat)
}
skw <- function(n, nsims){
t <- zscore <- numeric(nsims)
x <- vector("list", nsims)
for (i in 1:nsims) {
x[[i]] <- rnorm(n)
t[i] <- skwness(x[[i]])
zscore[i] <- t[i]/(6/n)
}
return(zscore)
}
放手一搏:
> x <- rnorm(100)
> skwness(x)
[1] 0.2332121
> skw(100, 10)
[1] 0.6643582 -1.6963196 -2.9192317 -2.7166170 4.9255001 0.0773482 3.9171435
[8] -3.3993994 -2.4258642 0.7075989