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
我想稍微解释一下 g
和 test
的函数定义中的语法,作者在其中注释 f.
和 g.
我已经在使用 map
或类似的东西时看到 .f
和 .g
之类的东西,但我还没有看到 .
出现。我试过谷歌搜索,但我无法确定到底是什么导致了糟糕的结果。我相信这与递归有关?其实我也不知道
末尾的点对语法没有影响,就像标识符中的任何其他合法字符一样。开头的点影响很小,但它确实意味着 ls()
默认情况下不会显示该变量。
在你发的例子中,作者大概是用f.
提醒reader默认值是f
,g.
提醒[=34] =] g
.
部分参数匹配意味着用户可以写 test(g = somefn)
并且 R 会将 somefn
视为 g.
参数的值。
在您看到此代码的参考问题中,原始函数有 header
g <- function(x, T, f=f) {
这是行不通的,因为默认值与参数同名,并且默认值是在函数的框架内计算的。所以它说“如果未指定参数 f
,请将其设置为参数 f
。”这是没有意义的。您发布的更正版本说“如果未指定参数 f.
,请将其设置为全局变量 f
。”
我正在读这个 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
我想稍微解释一下 g
和 test
的函数定义中的语法,作者在其中注释 f.
和 g.
我已经在使用 map
或类似的东西时看到 .f
和 .g
之类的东西,但我还没有看到 .
出现。我试过谷歌搜索,但我无法确定到底是什么导致了糟糕的结果。我相信这与递归有关?其实我也不知道
末尾的点对语法没有影响,就像标识符中的任何其他合法字符一样。开头的点影响很小,但它确实意味着 ls()
默认情况下不会显示该变量。
在你发的例子中,作者大概是用f.
提醒reader默认值是f
,g.
提醒[=34] =] g
.
部分参数匹配意味着用户可以写 test(g = somefn)
并且 R 会将 somefn
视为 g.
参数的值。
在您看到此代码的参考问题中,原始函数有 header
g <- function(x, T, f=f) {
这是行不通的,因为默认值与参数同名,并且默认值是在函数的框架内计算的。所以它说“如果未指定参数 f
,请将其设置为参数 f
。”这是没有意义的。您发布的更正版本说“如果未指定参数 f.
,请将其设置为全局变量 f
。”