我想在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)
答案 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)