You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言Earth包:如何提取evimp类结果并转为数据表?

Convert evimp Output to a Tidy Data Frame in R

Hey there! I’ve dealt with this exact frustration before when working with the earth package’s evimp() function—those S3 class objects don’t play nice with standard data frames right out of the box. Let’s break down how to convert that variable importance output into a structured table you can easily merge with your existing summary df.

Step 1: Understand the evimp Object Structure

First, know that under the hood, an evimp object is basically a named matrix with variable names as row names, and your desired metrics (GCV, RSS, subset count) as columns. We can leverage this to convert it directly to a data frame.

Step 2: Modify Your Loop to Capture and Convert evimp Results

Here’s how to adjust your existing loop to capture each evimp result, convert it to a data frame, and add metadata like the subset number:

library(earth)

# Initialize an empty list to store individual evimp results
evimp_results <- list()

# Your existing loop
for (subset_num in 1:1000) {
  # Extract your data subset (adjust this to match your actual subset logic)
  current_subset <- main_data[sample(nrow(main_data), size = YOUR_SUBSET_SIZE), ]
  
  # Run your MARS model
  mars_model <- earth(YOUR_RESPONSE ~ ., data = current_subset)
  
  # Get variable importance
  imp <- evimp(mars_model)
  
  # Convert evimp object to a data frame
  imp_df <- as.data.frame(imp)
  
  # Move row names (variable names) into a dedicated column
  imp_df$variable <- rownames(imp_df)
  
  # Add the subset number for tracking
  imp_df$subset_number <- subset_num
  
  # Store the converted data frame in our list
  evimp_results[[subset_num]] <- imp_df
}

# Combine all results into a single tidy data frame
final_evimp_table <- do.call(rbind, evimp_results)

Step 3: Merge with Your Summary Data Frame

Now that final_evimp_table is a standard data frame, you can merge it with your existing df using the subset_number column as the key:

# Merge your original summary df with the variable importance table
combined_summary <- merge(df, final_evimp_table, by = "subset_number")

Key Notes

  • The as.data.frame() conversion preserves all the metric columns (GCV, RSS, subset count) from the original evimp output.
  • Moving row names to a variable column makes the data frame "tidy"—each row represents a single variable’s importance metrics for one subset, which is easier to analyze and visualize later.
  • Using a list to store intermediate results is more efficient than appending to a data frame inside the loop (avoids repeated copying of large objects).

内容的提问来源于stack exchange,提问作者K. Mack

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:18:25