Fonction au sein de la Fonction dans la R

Pouvez-vous s'il vous plaît expliquez-moi pourquoi le code se plaint en disant que Samdat n'est pas trouvé?

Je suis en train de basculer entre les modèles, donc j'ai déclaré une fonction qui contient ces modèles et j'ai juste besoin d'appeler cette fonction comme l'un de l'argument dans la get.f fonction où le rééchantillonnage va changer la structure de chaque matrice de conception dans le modèle. Le code se plaint que Samdat n'est pas trouvé, quand il est trouvé.

Aussi, est-il un moyen pour moi de faire l'instruction conditionnelle if(Model == M1()) au lieu de devoir créer un autre argument M pour définir if(M==1)?

Voici mon code:

dat <-  cbind(Y=rnorm(20),rnorm(20),runif(20),rexp(20),rnorm(20),runif(20), rexp(20),rnorm(20),runif(20),rexp(20))
nam <- paste("v",1:9,sep="")
colnames(dat) <- c("Y",nam)
M1 <- function(){
a1 = cbind(Samdat[,c(2:5,7,9)])
b1 = cbind(Samdat[,c(2:4,6,8,7)])
c1 = b1+a1
list(a1=a1,b1=b1,c1=c1)}
M2 <- function(){
a1= cbind(Samdat[,c(2:5,7,9)])+2
b1= cbind(Samdat[,c(2:4,6,8,7)])+2
c1 = a1+b1
list(a1=a1,b1=b1,c1=c1)}
M3 <- function(){
a1= cbind(Samdat[,c(2:5,7,9)])+8
b1= cbind(Samdat[,c(2:4,6,8,7)])+8
c1 = a1+b1
list(a1=a1,b1=b1,c1=c1)}
#################################################################
get.f <- function(asim,Model,M){
sse <-c()
for(i in 1:asim){
set.seed(i)
Samdat <- dat[sample(1:nrow(dat),nrow(dat),replace=T),]
Y <- Samdat[,1]
if(M==1){
a2 <- Model$a1
b2 <- Model$b1
c2 <- Model$c1
s<- a2+b2+c2
fit <- lm(Y~s)
cof <- sum(summary(fit)$coef[,1])
coff <-Model$cof
sse <-c(sse,coff)
}
else if(M==2){
a2 <- Model$a1
b2 <- Model$b1
c2 <- Model$c1
s<- c2+12
fit <- lm(Y~s)
cof <- sum(summary(fit)$coef[,1])
coff <-Model$cof
sse <-c(sse,coff)
}
else {
a2 <- Model$a1
b2 <- Model$b1
c2 <- Model$c1
s<- c2+a2
fit <- lm(Y~s)
cof <- sum(summary(fit)$coef[,1])
coff <- Model$cof
sse <-c(sse,coff)
}
}
return(sse)
}
get.f(10,Model=M1(),M=1)
get.f(10,Model=M2(),M=2)
get.f(10,Model=M3(),M=3)
Pourriez vous s'il vous plaît reindent votre code pour voir où les fonctions de début et de fin? Peut-être que ce sera également vous aider à résoudre votre problème.
Je les ai séparés par une ligne de l'espace, qu'entendez-vous par reindent
Ce que je voulais dire, c'est exactement ce que Jilber fait pour vous.
Ce n'est pas moi qui a fait l'indentation, c'était @themel, les crédits d'aller pour lui. 🙂

OriginalL'auteur Falcon-StatGuy | 2012-09-01