你有一个办法,
但我会觉得很不舒服,在一个R包,这意味着被其他人使用。
我不知道R的命令检查是否会标记它。
您可以通过键入
`[.data.frame`
在控制台里。
在这里你可以看到正式的论点和主体。
你会看到默认的形式是
function (x, i, j, drop = if (missing(i)) TRUE else length(cols) == 1)
.
你可以用
trace
要插入将在函数求值开始时求值的表达式,请执行以下操作:
create_missing_cols <- function(x, j) {
missing_cols <- setdiff(j, colnames(x))
if (length(missing_cols) > 0L) {
for (column in missing_cols) {
x[[column]] <- NA
}
}
x
}
trace(`[.data.frame`,
print = FALSE,
tracer = quote(x <- create_missing_cols(x, j)))
df <- data.frame(a = 1:2)
df[, c("a", "b", "c")]
a b c
1 1 NA NA
2 2 NA NA
untrace(`[.data.frame`)
这假设只有在
j
是一个字符向量。
编辑:如果你最终使用了这个,
一定要考虑使用
on.exit(untrace(`[.data.frame`))
就在打电话给
追踪
,
这样即使出现错误,函数也不会被跟踪。