关于 R 中"f."的简单语法问题



我在这里阅读了这篇SO文章,给出的解决方案是R代码块:

f <- function(x, T) {
10 * sin(0.3 * x) * sin(1.3 * x^2) + 0.001 * x^3 + 0.2 * x + 80 
}
g <- function(x, T, f. = f) {  ## 1. note f.
exp(-f.(x)/T) 
}

test<- function(g. = g, T = 1) {  ## 2. note g.
g.(1,T) 
}

test()
## [1] 8.560335e-37

我只想对gtest的函数定义中的语法做一点解释,作者注意到f.g.。我在使用map或类似的东西时看到过.f.g之类的东西,但我还没有看到.。我试过在谷歌上搜索,但我无法确定它到底是什么,结果很糟糕。我相信这与递归有关?我真的不知道。

末尾的点对语法没有影响,它就像标识符中的任何其他合法字符一样。开头的点影响很小,但这意味着默认情况下ls()不会显示变量。

在您发布的示例中,作者可能使用f.来提醒读者默认值为f,而g.则提醒读者g

部分参数匹配意味着用户可以编写test(g = somefn),R将把somefn视为g.参数的值。

在你看到这段代码的参考问题中,原始函数有标题

g <- function(x, T, f=f) {

这是行不通的,因为默认值与参数同名,并且默认值是在函数的框架中计算的。所以上面写着";如果未指定参数f,请将其设置为参数f"这毫无意义。你发布的更正版本说";如果未指定参数f.,请将其设置为全局变量f">

最新更新