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

求助:基于R Shiny实现通用heating cycle数据分析程序的变量自动命名

实验室数据分析R程序开发问题

我正在为实验室编写数据分析的R程序,目前遇到了一些卡点:

实验背景:

  • 实验基于可多次运行的机器,每次运行周期称为heating cycle(HC)
  • 软件会导出含数据表的Word文档,每个数据表对应一个HC的事件
  • 实验做三次重复,得到doc1、doc2、doc3三个Word文档,目标是计算对应表格(如表1、表2)的均值
  • 已完成固定表格数量的版本,现在要开发R Shiny通用版,支持用户自定义每个文档的表格数量,同时需要做数据清洗

当前已实现的代码:

# 清洗并转换单个值的函数
clean_and_convert <- function(x) {
  x <- gsub("[°C]", "", x)
  x <- gsub("[J/g]", "", x)
  x <- gsub(",", ".", x)
  return(as.numeric(x))
}

# 从表格指定行提取值并应用clean_and_convert
extract_values <- function(table, row_index) {
  # 转换为数据框(如果还不是的话)
  table_df <- as.data.frame(table)
  
  # 删除第一列
  table_df <- table_df[, -1, drop = FALSE]
  
  # 提取指定行的值
  values <- table_df[row_index, , drop = FALSE]
  
  # 对每个值应用清洗转换
  cleaned_values <- lapply(values, clean_and_convert)
  
  # 返回向量
  return(unlist(cleaned_values))
}

# 从Word文档提取所有表格
extract_tables <- function(doc) {
  tables <- docxtractr::docx_extract_all_tbls(doc)
  return(tables)
}

# 根据用户输入提取并命名向量的函数
extract_and_name_vectors <- function(tables, num_tables, variable_prefix, doc_index) {
  user_vectors <- list()
  
  # 为每个表格提取并命名向量
  for (i in seq_len(num_tables)) {
    # 根据用户输入提取行
    extracted_rows <- tables[[i]][seq_len(num_tables), ]
    
    # 清洗转换值
    cleaned_values <- lapply(extracted_rows, clean_and_convert)
    
    # 根据用户输入的前缀创建向量名
    vector_names <- paste0(variable_prefix, seq_len(ncol(extracted_rows)), "doc", doc_index)
    
    # 将清洗后的值赋值给命名向量
    user_vectors[[paste0("table", i, variable_prefix, "doc", doc_index)]] <- setNames(
      unlist(cleaned_values), vector_names
    )
  }
  
  return(user_vectors)
}

# 提取三个文档的表格并生成值列表
tables_doc1 <- lapply(extract_tables(doc1), function(table) extract_values(table, 2))
tables_doc2 <- lapply(extract_tables(doc2), function(table) extract_values(table, 2))
tables_doc3 <- lapply(extract_tables(doc3), function(table) extract_values(table, 2))

当前卡点

上述代码生成了tables_doc1、tables_doc2、tables_doc3三个值列表,现在需要从这些列表中提取每个表格对应的数据向量,但变量命名规则需要满足:

  • 对于doc1,前X个向量(X为用户输入)命名为HC1doc1,接下来Y个命名为HC2doc1,以此类推
  • 该规则要应用到三个文档的所有表格
  • 希望自动化批量处理,不要手动写HC1doc1 <- as.numeric(tables_doc1[[1]])这类代码,要适配不同的表格数量

我是R新手,需要详细易懂的解决方案。


内容的提问来源于stack exchange,提问作者Tom Konings

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 03:57:51