1. 动态构建公式对象
library(reshape2)
 
# 简单示例数据
df <- data.frame(
	ID = c("A", "A", "B", "B"),
	Type = c("X", "Y", "X", "Y"),
	Value = c(10, 15, 20, 25)
)
 
# 动态构造公式字符串
form_str <- "ID ~ Type"
form_obj <- as.formula(form_str)
 
# 使用 reshape2::dcast
dcast(df, form_obj, value.var = "Value")
 
  1. 批量移动文件到指定目录?
library(tidyverse)
 
base_dir <- "D:/project/"
# 模拟的文件移动任务
df <- tibble(
	files = c("file1.raw", "file2.raw", "file3.raw"),  #文件
	path  = c("A/sample1", "A/sample2", "B/sample3")  #指定目录
)
 
 
#创建文件夹
df %>%
	distinct(path) %>%
	pull(path) %>%
	file.path(base_dir, .) %>%
	walk(~ dir.create(.x, recursive = TRUE, showWarnings = FALSE))
 
#移动文件夹
df %>%
	mutate(
		from = file.path(base_dir, files),
		to   = file.path(base_dir, path, files)
	) %>%
	pwalk(~ file.rename(..3, ..4))  # ..3 = from, ..4 = to
 
 
  1. 如何合并蛋白的区间?
library(GenomicRanges)
library(tidyverse)
# 模拟蛋白区域:3 个蛋白,各自有多个片段(有重叠)
df_protein <- data.frame(
	seqnames = c("chr1", "chr1", "chr1", "chr2", "chr2", "chr2"),
	start     = c(100, 150, 300, 1000, 1050, 2000),
	end       = c(200, 250, 350, 1100, 1150, 2100),
	protein_id = c("P1", "P1", "P1", "P2", "P2", "P3")
)
 
gr_protein <- GRanges(
	seqnames = df_protein$seqnames,
	ranges = IRanges(df_protein$start, df_protein$end),
	protein_id = df_protein$protein_id
)
 
reduced_grl_protein <- split(gr_protein, gr_protein$protein_id) %>% reduce()
 
reduced_grl_protein %>% as.data.frame()
  1. 如何在xlsx表中写入多个sheet?
# 示例数据 A:样本统计
A <- data.frame(
	Sample = paste0("Sample_", 1:5),
	Count = sample(50:100, 5),
	Category = sample(c("Control", "Treatment"), 5, replace = TRUE)
)
 
# 示例数据 B:表达矩阵
B <- data.frame(
	Gene = paste0("Gene", 1:5),
	Expr_1 = rnorm(5, mean = 10),
	Expr_2 = rnorm(5, mean = 12)
)
 
# 示例数据 C:差异分析结果
C <- data.frame(
	Protein = paste0("P", 1:5),
	log2FC = runif(5, -2, 2),
	p.value = signif(runif(5), 2)
)
 
# 示例数据 D:GO 富集结果
D <- data.frame(
	GO_Term = c("cellular process", "metabolic process", "response to stress"),
	Gene_Count = c(15, 20, 10),
	FDR = signif(runif(3, 0, 0.05), 2)
)
 
 
library(openxlsx)
 
data_list <- list(
	A = A,
	B = B,
	C = C,
	D = D
)
 
write.xlsx(data_list, file = "data.xlsx", overwrite = TRUE)
 

1.如何在map中使用计数功能?

library(purrr)
library(tibble)
 
# 模拟示例数据列表(共10个小数据框,每个都有“ID”和“value”)
data_list <- map(1:10, function(i) {
	tibble(ID = paste0("Sample", i),
		   value = rnorm(5))
})
names(data_list) <- paste0("Group_", 1:10)
 
# 初始化计数器
plot_counter <- 0
max_plots <- 6
 
# 遍历 data_list,只画前6个图,保留所有数据
s <- imap_dfr(data_list, function(draw, name) {
	# 模拟数据处理(如 AUC、ID 提取等)
	summary_value <- mean(draw$value)
	
	# 计数器自增
	plot_counter <<- plot_counter + 1
	
	# 只对前 max_plots 项做“画图”(这里只是打印)
	if (plot_counter <= max_plots) {
		message("Plotting: ", name)
		print(draw)
	}
	
	# 返回每项的汇总结果(这就是最终 map_dfr 的拼接结果)
	tibble(Name = name, ID = draw$ID[1], Value_Mean = summary_value)
})