调试简单的R代码

时间:2013-05-13 21:00:42

标签: r debugging

对于家庭作业,我正在构建一个简单的代码。 R继续返回,在评估p2时缺少x0。我无法弄清楚为什么,因为我似乎在Pareto函数中正确指定了它。

lab1 <- 50; mu <- 1; sigma <- 1 alpha1 <- 1 ; beta1 <- 1
lab2 <- 3; mu <- 5; sigma <- 5
alpha2 <- (1+sqrt(2)); x0 <- (10- 5* sqrt(2))
ES1 <- lab1 * alpha1/beta1; VarS1 <- lab1 * alpha1/(beta1^2)
ES2 <- lab2 * alpha2*x0/(alpha2-1); VarS2 <- lab2 * alpha2*x0^2/((alpha2-1)^2*(alpha2-2))
MM <- trunc(ES1 + ES2 + 10*sqrt(VarS1 + VarS2))
p1 <- pgamma((0:(MM-1)+0.5), alpha1, beta1) ##cdf
p1 <- c(p1,1) - c(0,p1) ## pdf
Pareto <- function (x, alpha2, x0) ifelse(x<x0 , 0, 1 - (x0/x)^alpha2)
p2 <- integrate(Pareto, lower = 0, upper = (MM-1)+0.5) ##cdf
p2 <- c(p2,1) - c(0,p2) ## pdf

非常感谢提前!

问候,文森特

2 个答案:

答案 0 :(得分:2)

在我看来,您需要在Pareto函数中提供integrate函数的参数。像那样

p2 <- integrate(Pareto, lower = 0, upper = (MM-1)+0.5, x0=x0, alpha2=alpha2) ##cdf

要访问integrate之后的值,您必须使用美元符号

访问它
p2 <- c(p2$value,1) - c(0,p2$value) ## pdf

答案 1 :(得分:1)

解决方法是指定alpha2和x0的默认值,如下所示,如果未指定,R将使用这些值。

Pareto <- function (x, alpha2 = (1+sqrt(2)), x0=(10- 5* sqrt(2))) ifelse(x<x0 , 0, 1 - (x0/x)^alpha2)