Mathematica中的MapThread函数

Mathematica中的MapThread函数,r,function,wolfram-mathematica,R,Function,Wolfram Mathematica,来自Mathematica,我开始使用R。Mathematica中有一个函数MapThread。从到不同列表的元素被插入到函数中。 下面是一个小例子: MapThread[#1*#2&,{1,2,3},{4,5,6}] 返回: {4,10,18} 我想知道R中是否有相同的函数。您可以使用mapply来实现: mapply('*', c(1,2,3), c(4,5,6)) [1] 4 10 18 第一个参数是要在以下参数上按元素应用的函数(在本例中为乘法*)。第二个参数是第一个向量,第三个参数

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

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

返回:

{4,10,18}


我想知道R中是否有相同的函数。

您可以使用
mapply
来实现:

mapply('*', c(1,2,3), c(4,5,6))
[1]  4 10 18
第一个参数是要在以下参数上按元素应用的函数(在本例中为乘法
*
)。第二个参数是第一个向量,第三个参数是第二个向量(函数将应用于其元素)


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

您可以使用
mappy

mapply('*', c(1,2,3), c(4,5,6))
[1]  4 10 18
第一个参数是要在以下参数上按元素应用的函数(在本例中为乘法
*
)。第二个参数是第一个向量,第三个参数是第二个向量(函数将应用于其元素)


如果您在控制台上键入
?mappy
,您可以看到更多的示例并阅读相关内容。

如果出于某种奇怪的原因,您可以执行明显的操作,例如,
c(1,2,3)*c(4,5,6)
do.call
将比
mappy
更有效:
do.call(“*”,list(c(1,2,3),c(4,5,6))


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

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


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

顺便说一句,困难的方法是
1:3*4:6
:-)@akrun谢谢akrun,对于这个例子肯定是一个更好的方法:)@Roland这是一个很好的方法。你不想添加它作为答案吗?顺便说一句,困难的方法是
1:3*4:6
:-)@akrun谢谢akrun,对于这个例子肯定是更好的方法:)@Roland这是一个很好的方法。是否要将其添加为答案?
mapply
是一个循环。尝试
mapply(函数(x,y){print(x);x*y},c(1,2,3),c(4,5,6))
。是的,我现在它是一个循环,我只是认为它会非常快,因为它是基于c的。很酷,我今天发现了一些新的东西。即使调用是由C代码完成的,每次迭代仍有一个对R函数的调用。
mapply
是一个循环。尝试
mapply(函数(x,y){print(x);x*y},c(1,2,3),c(4,5,6))
。是的,我现在它是一个循环,我只是认为它会非常快,因为它是基于c的。很酷,我今天发现了一些新的东西。即使调用是由C代码完成的,每次迭代仍然有一个对R函数的调用。