先查看各命令展开的示例,再按需展开其他选项及 R 实现。改写代码前,请阅读适用条件及差异说明。
capture
capture() 返回 TRUE 或 FALSE;若要保留错误信息,请用 try()。
clear
重启 R(RStudio 中的 Session > Restart R)才是真正干净的开始。
display
R 包:stats
sqrt(diag(vcov(fit)))["x"]
ereturn
broom::tidy(fit) 给出系数表,names(fit) 列出所有存储的内容。
foreach
Stata
foreach v of varlist v1-v5 { generate `v'_sq = `v'^2 }
R 包:dplyr
mutate(data, across(v1:v5, ~ .x^2, .names = "{col}_sq"))
across() 可以代替大部分对变量的循环;其他循环可用 for (v in names) { … }。
forvalues
Stata
forvalues i = 1/5 { generate v`i'_sq = v`i'^2 if v`i' > 0 }
R 包:dplyr
mutate(data, across(v1:v5, ~ if_else(.x > 0, .x^2, NA), .names = "{col}_sq"))
Stata
forvalues i = 6/10 { forvalues j = 3/5 { replace x_`i'_`j' = x_`i'_`j' + 1 } }
R 包:dplyr
mutate(data, across(matches("^x_([6-9]|10)_[3-5]$"), ~ .x + 1))
用正则表达式选择变量名。只需要一个数字范围时,可用 varlist(“x_[6-10]_*“)。
frame
R 可以同时保存任意多个数据框,各为独立的对象,相当于自带 frames。
if
Stata
if `x' > 0 { display "positive" }
R 包:base
if (x > 0) print("positive")
需要加引号:findit(“if”),因为 if 是 R 的保留字。
local
R 包:base
vars <- c("x1", "x2", "x3")
与 all_of() 一起使用:select(data, all_of(vars)) 或 across(all_of(vars), …)。
matrix
R 包:base
A <- matrix(c(1, 2, 3, 4), nrow = 2, byrow = TRUE)
preserve
R 不会原地修改数据,保留原对象、把结果赋给新名字即可;restore 相当于 data <- backup。
program
R 包:base
myprog <- function(data) { summ(data) }
quietly
R 包:stats
fit <- lm(y ~ x, data = data)
赋值的结果不会打印;之后用 print(fit) 或 summary(fit) 显示。
return
R 的结果是普通对象:赋值后可以提取其中的部分,例如 s <- summ(data, x); s$mean。
set
与 Stata 有差异 set_seed(.fn, seed) 可以在管道中设定种子;请参阅 sample 的条目。 R 与 Stata 使用不同随机数流;相同数值种子不会复现相同随机数或抽样行。
debug(f) 或 browser() 可以逐行运行函数。
tempfile
R 包:base
f <- tempfile(fileext = ".rds")
R 中不需要临时变量:中间结果可以之后删除,或保存为单独的对象。
version
renv::snapshot() 记录包的版本,便于以后重现项目。
while
Stata
while `i' < 10 { local i = `i' + 1 }
R 包:base
while (i < 10) { i <- i + 1 }