1
我有2 lists
。一個是股票權重和其他回報。這裏有一個例子:如何乘以列表之間的匹配列?
a <- matrix(c(0.15, 0.20, 0.10, 0.30, 0.25), 1,5)
colnames(a) <- c("AMBV4", "ARCZ6", "BBAS3", "BBDC4", "BRAP4")
b <- matrix(c(0.20, 0.30, 0.40, 0.10), 1,4)
colnames(b) <- c("ACES4", "AMBV4", "CMIG3", "CMIG4")
listab<-list(a,b)
c <- matrix(c(0.07, 0.22, 0.01, 0.05, 0.01, 0.12, 0.09, 0.09,0.03, 0.04, 0.21, 0.22, 0.01, 0.04, 0.55, 0.43), 2,8)
colnames(c) <- c("AMBV4", "ARCZ6", "CLSC4", "BBAS3", "BBDC4", "CESP5" , "CMIG3", "BRAP4")
d <- matrix(c(0.05, 0.12, 0.03, 0.04, 0.21, 0.22, 0.01, 0.04, 0.55, 0.43, 0.07, 0.22, 0.01, 0.05, 0.01, 0.12, 0.09, 0.09,0.03, 0.04), 2,10)
colnames(d) <- c("ACES4", "ARCZ6", "AMBV4", "CLSC4", "CMIG3", "CMIG4", "BBAS3", "DASA3", "BBDC4", "BRTP3")
listcd<-list(c,d)
我想用的回報,但回報listcd
比權重listab
更多的股票乘以權重。我知道如何做到這一點,當它有相同數量的數據,但不是這樣。下面是它應該如何結束:
result1 <- listab[[1]]*listcd[[1]][1, c(1,2,4,5,8)]
result2 <- listab[[1]]*listcd[[1]][2, c(1,2,4,5,8)]
x <- rbind(result1, result2)
result3 <- listab[[2]]*listcd[[2]][1, c(1,3,5,6)]
result4 <- listab[[2]]*listcd[[2]][2, c(1,3,5,6)]
y <- rbind(result3, result4)
list <- list(x,y)
> list
[[1]]
AMBV4 ARCZ6 BBAS3 BBDC4 BRAP4
[1,] 0.0105 0.002 0.009 0.009 0.1375
[2,] 0.0330 0.010 0.009 0.012 0.1075
[[2]]
ACES4 AMBV4 CMIG3 CMIG4
[1,] 0.010 0.063 0.220 0.007
[2,] 0.024 0.066 0.172 0.022
,我想應該指出的最後一點是,listcd
實際上是一個XTS的對象列表(它有時間信息)。
任何幫助將被折衷。謝謝!
非常說明你的解釋。現在我明白了'mapply'。謝謝! – 2014-12-11 00:25:54
之後,我正在運行'lapply(list,function(x){x < - rowSums(x)})'來獲得每日回報。正如我在問題中所評論的,其中一個列表(返回)實際上是一個'xts'對象列表。我想結果一個xts對象列表。你能提供一個提示嗎? (我需要它的日期信息。) – 2014-12-11 01:26:53
@JorgeDias,我不熟悉xts對象,所以我不能對此做太多評論。我會注意到,因爲你正在做rowsums部分,所以你應該真的執行'Y [,colnames(X)]%*%c(X)'來一步獲得相同的結果。 – BrodieG 2014-12-11 01:30:41