在 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)
}
我在 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)
}