【问题标题】:matlab to R: function calling and @matlab到R:函数调用和@
【发布时间】:2014-07-27 20:50:41
【问题描述】:

我使用 R,但我正在将代码从 matlab 转换为 R。我到达了一个我无法理解的部分。

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

g = @(b) f(a1, b, c1)

允许我通过 g(b) 仅指定 b 来调用 f

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

function dN = WW(N,h,A,P,aA,aP,bA,bP)

在代码中的某个位置,WW 被调用,但被调用

f = @(t,N) WW(N,h,A,P,aA,aP,bA,bP)

为什么我如此困惑是t,N在代码中的其他地方都没有提到......但是h,A,P,aA,aP,bA,bP都是事先定义的。

有人认识这种结构吗?可能发生了什么?

【问题讨论】:

标签: r matlab function porting


【解决方案1】:

您对@ 的评估是正确的。 @(t) 就是所谓的anonymous function。因此@(t) 将返回一个句柄 给一个函数,该函数接受一个变量t。基本上,它是一个接受一个参数t 的函数。其余参数之前在您的工作区中定义。

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

现在,使用另一个函数调用。 t 从未使用过,但 N 是!因此,N 将在您更改它时动态更改,但t 不会影响f 的函数句柄。不管t怎么变,f的输出都是一样的,前提是你不改N

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

【讨论】:

    【解决方案2】:

    在代码中的某个位置出现

    function dN = 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)
    

    (哎呀?t 没有被使用...)

    所以包含tN 的所有内容都会被替换或消失。

    【讨论】:

    • 卫生部。我在那里没有看到N。我更正了我的帖子。感谢您的洞察力:)
    猜你喜欢
    • 1970-01-01
    • 2012-10-29
    • 1970-01-01
    • 2010-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多