- 动态构建公式对象
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")
- 批量移动文件到指定目录?
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
- 如何合并蛋白的区间?
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()- 如何在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)
})