请考虑以下功能:-
abc<-function(n,alpha, sigma2=NULL){
if(!is.null(sigma2)){
return(qnorm(1-alpha, mean=0, sd=1, lower.tail=TRUE, log.p=FALSE))
}
else
{
return(qt(1-alpha, n-1, lower.tail=TRUE, log.p=FALSE))
}
}
abc1<-function(n, k, alpha, sigma2=NULL){
c1<-abc(n, alpha, sigma2)
Q<-matrix(10, nrow=k, ncol=1)
i=0
for(j in 1:k)
{
if(Q[j,1]>c1)
i=i+1
}
return(i/k)
}
我的兴趣主要在于具有条件参数的第二个函数。 sigma2
为NULL
或给出以下命令时,该函数均能正常工作:-
> abc1(10,10, 0.01, 1)
[1] 1
> abc1(10,10, 0.01)
[1] 1
但是,每当我尝试使用sapply
为sigma2
且其他参数固定为某个值的NULL
时,都会出现如下错误:-
n1<-1:100
> sapply(n1, abc1, k=10,alpha=0.01)
Error in if (Q[j, 1] > c1) i = i + 1 :
missing value where TRUE/FALSE needed
In addition: Warning message:
In qt(1 - alpha, n - 1, lower.tail = TRUE, log.p = FALSE) : NaNs produced
我不知道我在哪里犯错。谁能告诉我该如何解决这个问题?
答案 0 :(得分:1)
问题是您无法为qt(1-alpha, n-1, lower.tail=TRUE, log.p=FALSE)
评估n = 1
,因为您实际上是在要求0 df的T分布的分位数。
我不知道这些功能的目的是什么(所以也许下面的输出仍然是错误的),但是如果您更改n1 <- 2:100
,那么它应该可以工作,即
# Function definition
abc <- function(n, alpha, sigma2 = NULL) {
if (!is.null(sigma2)) {
return(qnorm(1 - alpha, mean = 0, sd = 1, lower.tail = TRUE, log.p = FALSE))
}
else {
return(qt(1 - alpha, n - 1, lower.tail = TRUE, log.p = FALSE))
}
}
abc1 <- function(n, k, alpha, sigma2 = NULL) {
c1 <- abc(n, alpha, sigma2)
Q <- matrix(10, nrow = k, ncol = 1)
i <- 0
for (j in 1:k)
{
if (Q[j, 1] > c1) {
i <- i + 1
}
}
return(i / k)
}
# Note that it starts from 2
n1 <- 2:100
sapply(n1, abc1, k = 10, alpha = 0.01)
#> [1] 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
#> [39] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
#> [77] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
由reprex package(v0.3.0)于2020-03-20创建