Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对生成的随机数据重复一个过程,并将结果保存在R中的数据帧中_R_Loops_Apply_Repeat - Fatal编程技术网

对生成的随机数据重复一个过程,并将结果保存在R中的数据帧中

对生成的随机数据重复一个过程,并将结果保存在R中的数据帧中,r,loops,apply,repeat,R,Loops,Apply,Repeat,我在R中创建随机数据,如下所示: 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 生成的数据是随机的,我通

我在R中创建随机数据,如下所示:

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
生成的数据是随机的,我通常使用
set.seed()
生成相同的结果。如果不修改主代码,我想运行我的代码100次(每次使用不同的数据),并将相应的结果保存在4个数据帧中
sigma
sub1.sigma
sub2.sigma
sub3.sigma
,以便比较它们。有没有办法在R中实现这一点

根据评论,我成功地创建了以下内容,但似乎仍然没有给出预期的结果。首先,代码[1:10]显示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]
sigmas <- as.data.frame(do.call(rbind,lapply(code, sigma)))
set.seed(2021年)

代码出于各种原因,我非常喜欢保留模型,因此我将从运行的模型列表开始。在这种情况下,
replicate(n,…,simplify=FALSE)
返回一个我们需要的列表。(对于记录,这相当于
lappy(seq_len(n),function(ign)…)

(旁注:我没有安装
glmnet
,所以我将用一个简单/荒谬的
lm
模型来模拟。)

set.seed(2021年)

型号
复制(100,…)
?复制并将结果返回到一个列表中可能会更好,稍后您可以将其缩减为帧。看,我试着应用你的建议,但仍在努力。我编辑了它并添加了主代码,你能给我一个关于如何使用
复制
的建议吗;我不知道我做错了什么。首先,代码[1:10]显示10个向量?这些是每次运行的
sigma
?为什么
sub.sigma
不计算?我不知道,对不起,你的代码把我弄糊涂了,因为我没有
glmnet
,我不能轻易地修改你的代码。没关系,谢谢你给我一些开始的东西!
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))
   > sigma
      X1      X2        X3 X4 X5        
     38.64019 624.4896  0  0  0 
> sub1.sigma
        X1  X3  X4  X5       
1 38.64019  0   0   0 
 
> sub2.sigma
        X1  X3 X4 X5          
1 38.64019  0  0  0 

> sub3.sigma
        X1  X3 X4 X5         
1 38.64019  0  0  0 
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]
sigmas <- as.data.frame(do.call(rbind,lapply(code, sigma)))