R 中的错误:x 必须是数字
Error in R: x must be numeric
我试着用 r "generate a random sample from any distribution using function" 写一个程序。但它显示 "Error in hist.default(xbars) : 'x' must be numeric"
我的节目在这里
sim.clt <- function(n, ran.func,..., simsize,...)
{
xbars<-vector()
for(i in 1:simsize=simsize)
{
x<-function(ran.func)
xbars[i]<-mean(x)
}
par(mfrow=c(2,1))
hist(xbars)
qqnorm(xbars)
return(xbars)
}
sim.out<-sim.clt(n=20,ran.func="rexp",simsize=5000)
shapiro.test(sim.out)
#
我是 r 编程的新手,所以想不通,如何解决这个问题。
谢谢...
这里有很多错误。
for(i in 1:simsize=simsize)
应该抛出一个错误:
> for(i in 1:simsize=simsize) { print(i)}
Error: unexpected '=' in "for(i in 1:simsize="
更好的是
for(i in seq_len(simsize))
然后
x <- function(ran.func)
没有按照您的想法去做;它返回一个以 xbars[i]<-mean(x)
作为主体的函数,如:
> x <- function(ran.func)
+
+ xbars[i]<-mean(x)
> x
function(ran.func)
xbars[i]<-mean(x)
> is.function(x)
[1] TRUE
我想你想打电话给 ran.func
所以你可能需要
FUN <- match.fun(ran.func)
x <- FUN()
但这会失败,因为您似乎没有传递任何参数让 ran.func
起作用,即使在使用 rexp
.[=33= 的示例中只是 n
]
错误消息源于最后一点。您将 xbars
定义为空的 vector()
,它默认创建了一个空的逻辑向量:
> xbars <- vector()
> xbars
logical(0)
> is.numeric(xbars)
[1] FALSE
现在,如果您在定义 x
时没有犯错误,这就不是问题了(回想一下 xbars[i]<-mean(x)
现在在函数 x
的主体中并且从未被明确调用过),这意味着 xbars
仍然是一个空的逻辑向量。由于这不是数字,hist
会抛出您看到的错误。
另一个错误是你不能在函数定义中使用两次...
。您是否试图让第一个包含传递给 ran.func
的参数和第二个 ...
传递给其他东西。你不能在 R 中做到这一点。
这是你想要的吗?
sim.clt <- function(n, ran.func, simsize, ...) {
## ... passed to ran.func for other parameters of distribution
xbars <- numeric(simsize)
for(i in seq_len(simsize)) {
FUN <- match.fun(ran.func)
x <- FUN(n = n, ...)
xbars[i] <- mean(x)
}
## plot
op <- par(mfrow=c(2,1))
on.exit(op)
hist(xbars)
qqnorm(xbars)
xbars
}
> sim.out<-sim.clt(n=20,ran.func="rexp",simsize=5000)
> shapiro.test(sim.out)
Shapiro-Wilk normality test
data: sim.out
W = 0.9867, p-value < 2.2e-16
我试着用 r "generate a random sample from any distribution using function" 写一个程序。但它显示 "Error in hist.default(xbars) : 'x' must be numeric" 我的节目在这里
sim.clt <- function(n, ran.func,..., simsize,...)
{
xbars<-vector()
for(i in 1:simsize=simsize)
{
x<-function(ran.func)
xbars[i]<-mean(x)
}
par(mfrow=c(2,1))
hist(xbars)
qqnorm(xbars)
return(xbars)
}
sim.out<-sim.clt(n=20,ran.func="rexp",simsize=5000)
shapiro.test(sim.out)
#
我是 r 编程的新手,所以想不通,如何解决这个问题。 谢谢...
这里有很多错误。
for(i in 1:simsize=simsize)
应该抛出一个错误:
> for(i in 1:simsize=simsize) { print(i)}
Error: unexpected '=' in "for(i in 1:simsize="
更好的是
for(i in seq_len(simsize))
然后
x <- function(ran.func)
没有按照您的想法去做;它返回一个以 xbars[i]<-mean(x)
作为主体的函数,如:
> x <- function(ran.func)
+
+ xbars[i]<-mean(x)
> x
function(ran.func)
xbars[i]<-mean(x)
> is.function(x)
[1] TRUE
我想你想打电话给 ran.func
所以你可能需要
FUN <- match.fun(ran.func)
x <- FUN()
但这会失败,因为您似乎没有传递任何参数让 ran.func
起作用,即使在使用 rexp
.[=33= 的示例中只是 n
]
错误消息源于最后一点。您将 xbars
定义为空的 vector()
,它默认创建了一个空的逻辑向量:
> xbars <- vector()
> xbars
logical(0)
> is.numeric(xbars)
[1] FALSE
现在,如果您在定义 x
时没有犯错误,这就不是问题了(回想一下 xbars[i]<-mean(x)
现在在函数 x
的主体中并且从未被明确调用过),这意味着 xbars
仍然是一个空的逻辑向量。由于这不是数字,hist
会抛出您看到的错误。
另一个错误是你不能在函数定义中使用两次...
。您是否试图让第一个包含传递给 ran.func
的参数和第二个 ...
传递给其他东西。你不能在 R 中做到这一点。
这是你想要的吗?
sim.clt <- function(n, ran.func, simsize, ...) {
## ... passed to ran.func for other parameters of distribution
xbars <- numeric(simsize)
for(i in seq_len(simsize)) {
FUN <- match.fun(ran.func)
x <- FUN(n = n, ...)
xbars[i] <- mean(x)
}
## plot
op <- par(mfrow=c(2,1))
on.exit(op)
hist(xbars)
qqnorm(xbars)
xbars
}
> sim.out<-sim.clt(n=20,ran.func="rexp",simsize=5000)
> shapiro.test(sim.out)
Shapiro-Wilk normality test
data: sim.out
W = 0.9867, p-value < 2.2e-16