debug
折角習ったので、debug()を使ってみる
例題
f1 <- function(x){
# sum-up elements of x
a <- 0
n <- length(x)
for(i in 1:n) a <- a+x[i]
# calculation of mean
b <- a/length(x)
# calculating variance
v <- 0
for(i in 1:v){
v <- v + (x[i]-b)^2/n
}
new.x <- (x-b)/sqrt(v)
return(newx)
}
> x<-c(1,2,3,4,5)
> x1<-f1(x)
以下にエラー f1(x) : オブジェクト'newx'がありません
f1 <- function(x){
+ a <- 0
+ n <- length(x)
+ for(i in 1:n) a <- a+x[i]
+ b <- a/length(x)
+ v <- 0
+ for(i in 1:v){
+ v <- v + (x[i]-b)^2/n
+ }
+ new.x <- (x-b)/sqrt(v)
+ return(new.x)
+ }
debug(f1)
> f1(x)
debuggingin: f1(x)
#1 の debug: {
a <- 0
n <- length(x)
for (i in 1:n) a <- a + x[i]
b <- a/length(x)
v <- 0
for (i in 1:v) {
v <- v + (x[i] - b)^2/n
}
new.x <- (x - b)/sqrt(v)
return(new.x)
}
Browse[2]>
#2 の debug: a <- 0
Browse[2]>
#3 の debug: n <- length(x)
Browse[2]> a
[1] 0
Browse[2]> n
#4 の debug: for (i in 1:n) a <- a + x[i]
Browse[2]> a
[1] 0
Browse[2]>
#5 の debug: b <- a/length(x)
Browse[2]> a
[1] 15
Browse[2]>
#6 の debug: v <- 0
Browse[2]> b
[1] 3
Browse[2]>
#7 の debug: for (i in 1:v) {
v <- v + (x[i] - b)^2/n
}
Browse[2]> v
[1] 0
Browse[2]>
#7 の debug: i
Browse[2]> v
[1] 0
Browse[2]> i
NULL
Browse[2]>
#8 の debug: v <- v + (x[i] - b)^2/n
Browse[2]> i
[1] 1
Browse[2]> v
[1] 0
Browse[2]>
#7 の debug: i
Browse[2]> v
[1] 0.8
Browse[2]>
#8 の debug: v <- v + (x[i] - b)^2/n#ここで一気にループが飛んだ!
Browse[2]>
#10 の debug: new.x <- (x - b)/sqrt(v)
Browse[2]>
#11 の debug: return(new.x)
Browse[2]> v
numeric(0)
Browse[2]>
exitingfrom: f1(x)
numeric(0)
> undebug(f1)
f2<- function(x){
a <- 0
n <- length(x)
for(i in 1:n) a <- a+x[i]
b <- a/length(x)
v <- 0
for(i in 1:n){
v <- v + (x[i]-b)^2/n
}
new.x <- (x-b)/sqrt(v)
return(new.x)
}
#実験
> x1<-f1(x)
> x1
[1] -1.4142136-0.7071068 0.0000000 0.7071068 1.4142136
> mean(x1)
[1] 0
> var(x1)*4/5
[1] 1
> x2<-runif(10)
> mean(x3)
[1] 7.214281e-17
> var(x3)*9/10
[1] 1
> x4<-c(0,0,0,0,0)
> x5<-f1(x4)
> mean(x5)
[1] NaN
> x5
[1] NaNNaNNaNNaNNaN
> x6<-c(0,0,0,1)
> x7<-f1(x6)
> mean(x6)
[1] 0.25
> mean(x7)
[1] -2.775558e-17
> var(x7)*3/4
[1] 1
この(0,0,0,0)の処理をどうしようか