【问题标题】:MapThread function from Mathematica in RR 中 Mathematica 的 MapThread 函数
【发布时间】:2015-10-12 09:01:05
【问题描述】:

来自 Mathematica 我开始使用 R。在 Mathematica 中有一个函数 MapThread。来自不同列表的元素被插入到函数中。 这是一个小例子:

MapThread[#1*#2 &, {{1, 2, 3}, {4, 5, 6}}]

返回:

{4、10、18}

我想知道R中是否有相同的功能。

【问题讨论】:

    标签: r function wolfram-mathematica


    【解决方案1】:

    您可以为此使用mapply

    mapply('*', c(1,2,3), c(4,5,6))
    [1]  4 10 18
    

    第一个参数是按元素应用于以下参数的函数(在本例中为乘法*)。然后第二个参数是第一个向量,第三个参数是第二个向量(函数将应用于其元素)。

    如果您在控制台上输入?mapply,您可以查看更多示例并阅读相关内容。

    【讨论】:

    • 顺便说一句,困难的方法是1:3 * 4:6 :-)
    • @akrun 感谢 Akrun,对于这个例子来说绝对是一个更好的方法 :)
    • @Roland 这是一个很好的 Roland。您不想将其添加为答案吗?
    【解决方案2】:

    如果出于某种奇怪的原因你可以做显而易见的事情,例如,c(1,2,3) * c(4,5,6)do.call 会比 mapply 更有效:do.call("*", list(c(1,2,3), c(4,5,6)))

    我认为这相当于您的 Mathematica 代码所做的。

    【讨论】:

    • mapply 是一个循环。试试mapply(function(x, y) {print(x); x * y}, c(1,2,3), c(4,5,6))
    • 是的,我现在是一个循环,我只是认为它会非常快,因为它是基于 C 的。太棒了,我今天发现了一些新东西。
    • 即使调用是由 C 代码完成的,每次迭代仍然需要调用 R 函数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多