Поэтому, если я правильно понимаю (и я не уверен, что понимаю), вы пытаетесь извлечь значения (и имена?) Вашего lasso.coef
объекта, в зависимости от того, равны ли они нулю или нет. .
Вы можете сделать это 100 раз в for
l oop следующим образом (если вы хотите собрать имена переменных):
f.non <- c(NULL)
f.disc <- c(NULL)
N=100
for (i in 1:N) {
n=200
p=200
X = mvrnorm(200, rep(0, p), diag(1, p, p))
Y = rowSums(X[, 1:10]) + 3.5 * rnorm(n)
lasso.model <- cv.glmnet(X, Y, alpha = 1, intercept = FALSE)
lasso.coef <- coef(lasso.model, s = lasso.model$lambda.1se)
# lasso_coefs <- lasso.coef[2:201]
# setNames(lasso_coefs, paste("V", as.character(seq(2, 201, 1)), sep = ""))
lasso_coefs_df <- data.frame(coef = lasso.coef[2:201], name = paste("V", as.character(seq(2,201,1)), sep = ""))
# f.non[[i]] <- as.list(lasso_coefs[lasso_coefs == 0])
# f.disc[[i]] <- as.list(lasso_coefs[lasso_coefs != 0])
f.non[[i]] <- lasso_coefs_df[lasso_coefs_df$coef == 0, ]
f.disc[[i]] <- lasso_coefs_df[lasso_coefs_df$coef != 0, ]
}
В противном случае и многое другое аналогично вашей попытке, если вы просто хотите получить суммы для каждого диапазона переменных (2-11, 12-201):
f.non <- c(NULL)
f.disc <- c(NULL)
N=100
for (i in 1:N) {
n=200
p=200
X = mvrnorm(200, rep(0, p), diag(1, p, p))
Y = rowSums(X[, 1:10]) + 3.5 * rnorm(n)
lasso.model <- cv.glmnet(X, Y, alpha = 1, intercept = FALSE)
lasso.coef <- coef(lasso.model, s = lasso.model$lambda.1se)
f.non[[i]] <- sum(lasso.coef[2:11,] == 0)
f.disc[[i]] <- sum(lasso.coef[12:201,] != 0)
}