2014-03-12 58 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) 
相關問題