📘
📋 R代码编写规范 (Best Practices)
以下是一套完整的R代码编写标准,帮助你生成规范、可维护、可复现的R代码。将这些规范发送给AI,生成的代码将符合医学研究的最佳实践。
🚀 完整提示词
R代码编写规范(复制给AI)
Prompt:
在编写R代码的过程中,注意以下几点:
## 路径管理
- 我的文件读取文件夹在相对路径 ./input
- 我的结果输出文件夹在相对路径 ./output
## 包引用规范
- 如果使用的是 dplyr 包的 filter() 函数,记得加上 `dplyr::filter()` 进行包指定,否则会报错
- 建议所有函数都使用 `包名::函数名()` 的格式调用
## 代码注释
- 在代码适当的地方加上注释 #,方便我查看和理解
## 文件保存命名
- 如果涉及到文件保存,建议文件前自动加入当日的8位数时间
- 示例代码:
```r
time_today <- as.Date(Sys.Date(), format='%Y%m%d')
index <- paste0("./output/", time_today, "_several_Comments.pdf")
ggsave(plot, filename = index, width = 20, height = 8)
```
## 循环使用规范
- 如果涉及到 For 循环,请使用 `foreach` 包中的 foreach 函数
- 格式:`foreach(i = ..., .errorhandling = "pass") %do% {......}`
- 请在循环中使用 `print` 或者 `message` 信息,指示当前分析的变量或项目或模型是什么
- 方便我在 console 中查看实时进度
- 如果有无法分析需要跳过的循环,请也用 `print` 或者 `message` 信息说明
## 列名规范
- 如果需要生成新列名,不要带有空格或者句点,容易报错
- 使用短下划线代替(如:baseline_age 而非 baseline.age 或 baseline age)
## 可选项
- 在代码首行添加清除环境:`rm(list = ls())`
- 如果 P < 0.001,则标记为 "<0.001";P值保留小数点后三位
- 提取模型系数和95%置信区间,整理成格式:
```r
ci_formatted <- sprintf("%.2f (%.2f to %.2f)", result_row$Estimate, result_row$CI_Lower, result_row$CI_Upper)
```
[在此描述你的分析需求]
📖 规范详解
1️⃣ 路径管理规范
原则:使用相对路径,便于项目移植
# ✅ 推荐
data <- read.csv("./input/raw_data.csv")
write.csv(result, "./output/result_20260208.csv")
# ❌ 避免
data <- read.csv("/Users/username/Documents/project/data.csv")
💡 使用 `here` 包或 `file.path()` 函数可以更好地处理跨平台路径问题
2️⃣ 包引用规范
问题:不同包可能有同名函数(如 `filter()` 在 dplyr 和 stats 中都存在)
# ✅ 推荐:明确指定包
dplyr::filter(data, age > 18)
stats::filter(data, lowpass)
# ❌ 可能报错
filter(data, age > 18) # 如果未加载 dplyr,会调用 stats::filter()
💡 使用 `包名::函数名()` 可以避免函数冲突,提高代码可读性
3️⃣ 文件命名规范
原则:文件名包含日期,便于版本管理
# ✅ 推荐格式
time_today <- format(Sys.Date(), "%Y%m%d") # 20260208
filename <- paste0("./output/", time_today, "_analysis_result.xlsx")
# 输出示例:./output/20260208_analysis_result.xlsx
4️⃣ 循环使用规范
优势:`foreach` 比 `for` 更灵活,支持并行计算
library(foreach)
# ✅ 推荐:带进度提示
results <- foreach(
i = 1:100,
.errorhandling = "pass" # 遇到错误继续执行
) %do% {
message(paste("正在处理第", i, "个样本..."))
# 你的分析代码
result
}
# ❌ 避免:无进度提示
for (i in 1:100) {
# 你的分析代码
}
💡 `.errorhandling = "pass"` 确保某个元素出错不会中断整个循环
5️⃣ 列名规范
原则:避免空格和句点,使用下划线
# ✅ 推荐
baseline_age
systolic_bp
diagnosis_time
# ❌ 避免
baseline age # 有空格
baseline.age # 有句点(在某些情况下会被误解析)
baseline-age # 有连字符
💡 使用下划线是最安全的选择,R中所有操作都支持
6️⃣ P值格式规范
标准:P < 0.001 显示为 "<0.001"
# ✅ 推荐格式化函数
format_pvalue <- function(p) {
ifelse(p < 0.001, "<0.001", sprintf("%.3f", p))
}
# 使用
result$p_formatted <- format_pvalue(result$p_value)
# 输出示例:
# 0.123 → "0.123"
# 0.0005 → "<0.001"
7️⃣ 置信区间格式
标准格式:系数 (95% CI: 下限 to 上限)
# ✅ 推荐格式化
ci_formatted <- sprintf(
"%.2f (%.2f to %.2f)",
result_row$Estimate,
result_row$CI_Lower,
result_row$CI_Upper
)
# 输出示例:1.23 (0.98 to 1.48)
💡 最佳实践建议
1. 项目结构标准化
project_name/
├── R/ # R脚本
├── data/
│ ├── raw/ # 原始数据(只读)
│ └── processed/ # 处理后数据
├── output/ # 结果输出
├── figures/ # 图表
└── README.md # 项目说明
2. 使用 RStudio 项目
创建 `.Rproj` 文件,自动设置工作目录,避免路径问题
3. 版本控制
使用 Git 跟踪代码变更,便于回溯和协作
4. 代码复现性
设置随机种子 `set.seed(123)`,确保结果可复现