创建一个带有向量和列表的函数,并返回它们的每个元素的乘积

时间:2014-03-12 16:16:00

标签: r

我想在f中创建一个函数R,它以列表x和向量y作为参数,并返回一个列表,其元素是乘法后的乘积列表中每个元素的向量的每个元素。

x = list(x1 = runif(10), x2 = rnorm(10), x3 = 1:10, x4 = seq(1,.1,-.1))
y = c(2, 1, 3)

我希望f(x,y)返回每个x[[i]] * y[j]元素为i = 1:length(x)的列表 和j = 1:length(y)

3 个答案:

答案 0 :(得分:2)

这样可行:

lapply(x, function(z) lapply(y, "*", z))

然而,你需要做一些关于使用索引进行移动的工作,现在你接近让我订购一个函数,然后你们就为我做了。

答案 1 :(得分:1)

您可以使用mapply("*", x, y),但需要修改“y”,以便每个乘数重复length(x)次。换句话说,以下内容应该有效:

mapply("*", x, rep(y, each = length(x)))

您可能需要将名称添加回结果中。


如果每个列表项的长度相同(在您的示例中,它们都包含10个值),以下是@ Tyler答案的变体:

lapply(y, "*", do.call(rbind, x))

这将产生结果矩阵列表。

答案 2 :(得分:1)

这也应该有效 - 取决于你喜欢什么样的结果

lapply(x , outer , y)