我对 R 在一个非常具体的情况下的行为感到有点惊讶。假设我定义了一个square
返回其参数平方的函数,如下所示:
square <- function(x) { return(x^2) }
我想在另一个函数中调用这个函数,我也想在我这样做的时候显示它的名字。我可以使用deparse(substitute())
. 但是,请考虑以下示例:
ds1 <- function(x) {
print(deparse(substitute(x)))
}
ds1(square)
# [1] "square"
这是预期的输出,所以一切都很好。但是,如果我传递包含在列表中的函数并使用 for 循环对其进行处理,则会发生以下情况:
ds2 <- function(x) {
for (y in x) {
print(deparse(substitute(y)))
}
}
ds2(c(square))
# [1] "function (x) " "{" " return(x^2)" "}"
谁能向我解释为什么会发生这种情况以及如何防止它发生?