2014-03-12 23 views
0

我想在R这需要一个列表x和矢量y作为参数,并返回其元素是产品经过列表创建函数f的产品将向量的每个元素乘以列表的每个元素。创建一个函数取一个向量和列表,并将其送回的每个元素

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)

回答

2

列表这会工作:

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

但是你需要做一些工作的上述动态与索引相关的事情现在你接近让我订购一个功能,你们为我做。

+0

我是一个新的R用户。我可以看到这段代码有效,但我发现很难将结果列表的元素调用以进一步分析。 – Duna

+0

您是否阅读过有关索引的介绍手册? http://cran.r-project.org/manuals.html'[['' –

1

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

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

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


如果每个列表项的长度是相同的(在你的例子,它们都包含10个值),下面是@泰勒的回答变化:

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

这将导致结果的矩阵列表。

+0

我发现输出更容易使用。我更愿意以一种方式来命名元素,以便我能够识别哪一个属于什么。这可以使用前缀x – Duna

+0

作为'd = lapply(x,function(z){sapply(y,“*”,z)})'和'df = as.data.frame(d)' – Duna

1

这也应该工作 - 取决于你喜欢什么形式的结果

lapply(x , outer , y) 
相关问题