在 R 中的循环中使用函数

use a function inside a loop in R

我在 R 中的 for 循环内调用函数时遇到问题。

我已经定义了一个名为 X 的 function/model。我想在 for 循环中使用该函数,因为我想通过 function/model

产生 50 个结果

是这样的吗?

func <- X(n)

   result = list()
   for (i in 1:50){
     result[i] = X(i)
    }

我试图查看此处的一些问题,但我似乎无法解决问题。 数据)<-c("y",粘贴("X",1:p,sep="")) X

我这里需要生成50个X的数据集。 X 是一个 100x10 矩阵。

我们可以将代码包装在一个函数中并使用replicate

f1 <- function(n, p) {
  y<-rbinom(n,1,0.5)
  y<-ifelse(y==0,-1,y)

   X<-matrix(ncol=p,nrow=n)
   for(i in 1:n){
     u<-runif(1)
    if(u>0.3){
     for(j in 1:3){
       X[i,j]<-y[i]*rnorm(1,j,1)
     }
    for(j in 4:6){
       X[i,j]<-y[i]*rnorm(1,0,1)
    }
    if(p>6){
      X[i,7:p]<-rnorm(p-6,0,1)
    }
    
  }else{
    for(j in 1:3){
      X[i,j]<-y[i]*rnorm(1,0,1)
    }
    for(j in 4:6){
      X[i,j]<-y[i]*rnorm(1,j-3,1)
    }
    if(p>6){
      X[i,7:p]<-rnorm(p-6,0,1)
    }
  }
}
data<-data.frame(cbind(y,X))
names(data)<-c("y",paste("X",1:p,sep=""))
data 
}

现在,我们使用replicate

out <- replicate(50, f1(n = 100, p = 10), simplify = FALSE)

一种循环遍历列而不是行的方法,以防您感兴趣。我还对复制部分进行了“手动编码”。

gendata <- function(n, p) {
    y <- rbinom(n,1,0.5)
    y[y==0] <- -1
    
    X <- matrix(ncol=p, nrow=n)
    u <- runif(n)
    for(j in 1:p) {
        m <- rep(0, n)
        if(p %in% 1:3) m[u>0.3] <- p
        if(p %in% 4:6) m[u<0.3] <- p-3
        X[,j] <- rnorm(n, mean=m, sd=1)
    }
    
    data <- data.frame(cbind(y,X))
    names(data) <- c("y",paste("X",1:p,sep=""))
    
    return(data)
}

mylist <- vector(mode="list", length=50)
for (i in 1:50) {
    mylist[[i]] <- gendata(n=100, p=10)
}