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

Simple syntax question regarding "f." in R

我正在读这个 SO post here,给出的解决方案是这个 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.提醒reader默认值是fg.提醒[=34] =] g.

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

在您看到此代码的参考问题中,原始函数有 header

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

这是行不通的,因为默认值与参数同名,并且默认值是在函数的框架内计算的。所以它说“如果未指定参数 f,请将其设置为参数 f。”这是没有意义的。您发布的更正版本说“如果未指定参数 f.,请将其设置为全局变量 f。”