R中的复复制函数

R中的复复制函数,r,loops,apply,replication,glmnet,R,Loops,Apply,Replication,Glmnet,我在R中有一个代码,它最终生成一个名为sigma的向量和3个子集,即sub1.sigma,sb2.sigma,sub3.sigma。我想重复这个过程n次,比如说10次,然后观察上面提到的向量上的值。我使用的复制函数如下 set.seed(2021) code <- replicate(10,{ data<-matrix(rnorm(100*5,mean=0,sd=1), 100, 5) colnames(data) <- c("X1", "X2

我在R中有一个代码,它最终生成一个名为
sigma
的向量和3个子集,即
sub1.sigma
sb2.sigma
sub3.sigma
。我想重复这个过程n次,比如说10次,然后观察上面提到的向量上的值。我使用的复制函数如下

set.seed(2021)

code <- replicate(10,{
data<-matrix(rnorm(100*5,mean=0,sd=1), 100, 5) 
colnames(data) <- c("X1", "X2", "X3", "X4", "X5")
data <- as.data.frame(data)
a <- 5 
b <- 0.8
c <- 100

data[,2] <- a*data[,1] - b*rnorm(c)
data[,3] <- a*data[,1] + b*rnorm(c)
data[,4] <- a*data[,1] - b*rnorm(c)

library(glmnet)
library(coefplot)

A <- as.matrix(data)
set.seed(1)
results <- lapply(seq_len(ncol(A)), function(i) {
  list(
    cvfit = cv.glmnet(A[, -i] , A[, i] , standardize = TRUE , type.measure = "mse" , nfolds = 10 , alpha = 1)
  )
})

lam <- as.data.frame(`names<-`(
  lapply(results, function(x) (x$cvfit$lambda.min)), 
  paste0("X", seq_along(results))
))

sigma<- matrix(rnorm(1*5,mean=0,sd=1), 1, 5) 
colnames(sigma) <- c("X1", "X2", "X3", "X4", "X5")
as.vector(sigma)
sub1.sigma <- subset(sigma, select = sigma <= sum(lam))
sub2.sigma <- subset(sigma, select = sigma <= 2*sum(lam))
sub3.sigma <- subset(sigma, select = sigma <= 3*sum(lam))
}, simplify = FALSE)

code[1:10]

由于您没有从
replicate
返回任何内容,因此它返回代码的最后一行,即
sub3.sigma
。您可以返回一个输出列表

library(glmnet)
library(coefplot)
set.seed(2021)

code <- replicate(10,{
  data<-matrix(rnorm(100*5,mean=0,sd=1), 100, 5) 
  colnames(data) <- c("X1", "X2", "X3", "X4", "X5")
  data <- as.data.frame(data)
  a <- 5 
  b <- 0.8
  c <- 100
  
  data[,2] <- a*data[,1] - b*rnorm(c)
  data[,3] <- a*data[,1] + b*rnorm(c)
  data[,4] <- a*data[,1] - b*rnorm(c)
  
  A <- as.matrix(data)
  set.seed(1)
  results <- lapply(seq_len(ncol(A)), function(i) {
    list(
      cvfit = cv.glmnet(A[, -i] , A[, i] , standardize = TRUE , type.measure = "mse" , nfolds = 10 , alpha = 1)
    )
  })
  
  lam <- as.data.frame(`names<-`(
    lapply(results, function(x) (x$cvfit$lambda.min)), 
    paste0("X", seq_along(results))
  ))
  
  sigma<- matrix(rnorm(1*5,mean=0,sd=1), 1, 5) 
  colnames(sigma) <- c("X1", "X2", "X3", "X4", "X5")
  sub1.sigma <- subset(sigma, select = sigma <= sum(lam))
  sub2.sigma <- subset(sigma, select = sigma <= 2*sum(lam))
  sub3.sigma <- subset(sigma, select = sigma <= 3*sum(lam))
  dplyr::lst(sigma, sub1.sigma, sub2.sigma, sub3.sigma)
  
}, simplify = FALSE)
库(glmnet)
图书馆(coefplot)
种子集(2021年)
代码
library(glmnet)
library(coefplot)
set.seed(2021)

code <- replicate(10,{
  data<-matrix(rnorm(100*5,mean=0,sd=1), 100, 5) 
  colnames(data) <- c("X1", "X2", "X3", "X4", "X5")
  data <- as.data.frame(data)
  a <- 5 
  b <- 0.8
  c <- 100
  
  data[,2] <- a*data[,1] - b*rnorm(c)
  data[,3] <- a*data[,1] + b*rnorm(c)
  data[,4] <- a*data[,1] - b*rnorm(c)
  
  A <- as.matrix(data)
  set.seed(1)
  results <- lapply(seq_len(ncol(A)), function(i) {
    list(
      cvfit = cv.glmnet(A[, -i] , A[, i] , standardize = TRUE , type.measure = "mse" , nfolds = 10 , alpha = 1)
    )
  })
  
  lam <- as.data.frame(`names<-`(
    lapply(results, function(x) (x$cvfit$lambda.min)), 
    paste0("X", seq_along(results))
  ))
  
  sigma<- matrix(rnorm(1*5,mean=0,sd=1), 1, 5) 
  colnames(sigma) <- c("X1", "X2", "X3", "X4", "X5")
  sub1.sigma <- subset(sigma, select = sigma <= sum(lam))
  sub2.sigma <- subset(sigma, select = sigma <= 2*sum(lam))
  sub3.sigma <- subset(sigma, select = sigma <= 3*sum(lam))
  dplyr::lst(sigma, sub1.sigma, sub2.sigma, sub3.sigma)
  
}, simplify = FALSE)
result <- lapply(purrr::transpose(code), function(x) do.call(rbind, x))