matlab到R:函数调用和@

matlab到R:函数调用和@,r,matlab,function,porting,R,Matlab,Function,Porting,我使用R,但我正在将matlab中的代码翻译成R。我已经到了一个我无法摸索的地方 我的研究表明,@允许您使用固定变量以另一个名称调用函数,例如 g = @(b) f(a1, b, c1) 允许我调用f仅通过执行g(b) 在我正在使用的代码中有一个函数 function dN = WW(N,h,A,P,aA,aP,bA,bP) 在代码中的某个点,它显示为WW被调用,但使用 f = @(t,N) WW(N,h,A,P,aA,aP,bA,bP) f = @(t,N) WW(N,h,A,P,aA,

我使用
R
,但我正在将matlab中的代码翻译成
R
。我已经到了一个我无法摸索的地方

我的研究表明,
@
允许您使用固定变量以另一个名称调用函数,例如

g = @(b) f(a1, b, c1)
允许我调用
f
仅通过执行
g(b)

在我正在使用的代码中有一个函数

function dN = WW(N,h,A,P,aA,aP,bA,bP)
在代码中的某个点,它显示为
WW
被调用,但使用

f = @(t,N) WW(N,h,A,P,aA,aP,bA,bP)
f = @(t,N) WW(N,h,A,P,aA,aP,bA,bP)
我之所以如此困惑,是因为
t,N
在代码中没有提到其他内容……但是
h,A,p,aA,aP,bA,bP都是在前面定义的


有人认识到这种结构以及可能发生的情况吗?

您对
@
的评估是正确的
@(t)
就是我们所知道的
@(t)
将因此向接受一个变量
t
的函数返回句柄。基本上,它是一个包含一个参数的函数,
t
。其余参数先前在工作区中定义

例如,您的
g=@(b)f(a1,b,c1)
语句允许您将此函数调用封装到另一个名为
g
的函数中,而
a1
c1
是先前在您的工作区中定义的。因此,此函数将依赖于进入函数的一个变量,即
b
。因此,当您调用函数
g
时,这些参数将保持静态,您可以动态更改
b
。换句话说,每次调用
g
a1
c1
将始终保持不变,而
b
将根据您放入
g
中的内容而变化(签出)。显然,如果工作区中的
a1
c1
发生了变化,那么下次调用
g
时也会反映出这种行为

现在,使用另一个函数调用
t
从未使用过,但
N
使用过!同样地,
N
在您改变它时将动态地改变,但是
t
f
的函数句柄没有影响。无论您如何更改
t
,只要您不更改
N
,则
f
的输出将是相同的


无论如何,您的评估确实是正确的。

您对
@
的评估是正确的
@(t)
就是我们所知道的
@(t)
将因此向接受一个变量
t
的函数返回句柄。基本上,它是一个包含一个参数的函数,
t
。其余参数先前在工作区中定义

例如,您的
g=@(b)f(a1,b,c1)
语句允许您将此函数调用封装到另一个名为
g
的函数中,而
a1
c1
是先前在您的工作区中定义的。因此,此函数将依赖于进入函数的一个变量,即
b
。因此,当您调用函数
g
时,这些参数将保持静态,您可以动态更改
b
。换句话说,每次调用
g
a1
c1
将始终保持不变,而
b
将根据您放入
g
中的内容而变化(签出)。显然,如果工作区中的
a1
c1
发生了变化,那么下次调用
g
时也会反映出这种行为

现在,使用另一个函数调用
t
从未使用过,但
N
使用过!同样地,
N
在您改变它时将动态地改变,但是
t
f
的函数句柄没有影响。无论您如何更改
t
,只要您不更改
N
,则
f
的输出将是相同的

无论如何,你的评估确实是正确的

在代码中的某个点上,它出现了

function dN = WW(N,h,A,P,aA,aP,bA,bP)
被称为,但被称为与

f = @(t,N) WW(N,h,A,P,aA,aP,bA,bP)
f = @(t,N) WW(N,h,A,P,aA,aP,bA,bP)
我之所以如此困惑,是因为
t,N
在这本书中没有提到 代码…但是
h、A、P、aA、aP、bA、bP都是在前面定义的

那完全可以。这里发生的是如果你这样做

f(value_for_t, value_for_N)
它叫

WW(value_for_N,h,A,P,aA,aP,bA,bP)
(oops?
t
未使用…)

因此,包含
t
N
的所有内容都被替换或消失

在代码中的某个点上,它出现了

function dN = WW(N,h,A,P,aA,aP,bA,bP)
被称为,但被称为与

f = @(t,N) WW(N,h,A,P,aA,aP,bA,bP)
f = @(t,N) WW(N,h,A,P,aA,aP,bA,bP)
我之所以如此困惑,是因为
t,N
在这本书中没有提到 代码…但是
h、A、P、aA、aP、bA、bP都是在前面定义的

那完全可以。这里发生的是如果你这样做

f(value_for_t, value_for_N)
它叫

WW(value_for_N,h,A,P,aA,aP,bA,bP)
(oops?
t
未使用…)


因此,包含
t
N
的所有内容都被替换或消失。

这些都是“匿名函数”。
@(t,N)
部分中的变量是仅在匿名函数体范围内的函数参数。请看这些是“匿名函数”。
@(t,N)
部分中的变量是仅在匿名函数体范围内的函数参数。见卫生部。我没有看到那里的
N
。我更正了我的帖子。谢谢你的洞察力:)啊。我没有看到那里的
N
。我更正了我的帖子。感谢您的洞察力:)