Why can't use normal fit() with library(stacks) ? and how to extract_model from model_stack?

No, because the results don't have the information needed to fit the stack.

Sure. Here is some code:

library(stacks)
library(tidymodels)
#> Registered S3 method overwritten by 'tune':
#>   method                   from   
#>   required_pkgs.model_spec parsnip
tidymodels_prefer()
theme_set(theme_bw())

reg_st <- 
  stacks() %>%
  add_candidates(reg_res_lr) %>%
  add_candidates(reg_res_svm) %>%
  add_candidates(reg_res_sp) %>% 
  blend_predictions() %>%   # <- defines what is in the ensemble
  fit_members()             # <- creates all of the model fits

reg_st
#> ── A stacked ensemble model ─────────────────────────────────────
#> 
#> Out of 15 possible candidate members, the ensemble retained 4.
#> Penalty: 0.1.
#> Mixture: 1.
#> 
#> The 4 highest weighted members are:
#> # A tibble: 4 × 3
#>   member          type       weight
#>   <chr>           <chr>       <dbl>
#> 1 reg_res_svm_1_5 svm_rbf     2.64 
#> 2 reg_res_svm_1_3 svm_rbf     0.675
#> 3 reg_res_svm_1_1 svm_rbf     0.302
#> 4 reg_res_sp_2_1  linear_reg  0.236

length(reg_st$member_fits)
#> [1] 4


model_objects <- 
  # models are in member_fits
  reg_st$member_fits %>% 
  # pull out the underlying fit objects
  map(extract_fit_engine)

map_chr(model_objects, ~ class(.x)[1])
#> reg_res_svm_1_5 reg_res_svm_1_3 reg_res_svm_1_1  reg_res_sp_2_1 
#>          "ksvm"          "ksvm"          "ksvm"            "lm"

Created on 2021-10-29 by the reprex package (v2.0.0)

2 Likes