不知道如果我理解正確你的問題,但你可以使用tapply的Elid來向每個行的矩陣中提取你想要的信息。
我首先創建一個與您的a大小相同的「分組矩陣」。 這可以作爲將每行作爲輸入分組到您的lambda函數中的索引。
matrix(rep(1:10,4),nrow=10,ncol=4)
然後,我用分組矩陣在原始矩陣上運行「tapply」。此子集的矩陣,使得每個行矢量被傳遞到功能:
function(x) { return(x[which(x<0)]) }
它簡單地返回所有值,其中值小於零每行。
> a
[,1] [,2] [,3] [,4]
[1,] 0.5341781 -0.9263866 -0.5380141 -1.2453310
[2,] 0.2931630 1.0490300 0.8127472 0.2473263
[3,] 1.0936143 -0.3399709 1.8199833 1.0053080
[4,] 1.0002433 0.2002659 1.7730118 1.7578414
[5,] 0.8116914 0.9371518 0.8727981 1.4236349
[6,] -0.1127914 1.1563594 1.0331311 0.7658510
[7,] -0.5423493 1.8905533 -0.8121652 0.1355076
[8,] -1.6589310 0.4081290 0.3560005 1.6043205
[9,] 1.8760435 0.8826245 1.4457357 0.7561550
[10,] -0.8503400 0.2302597 0.5838986 0.1252952
> matrix(rep(1:10,4),nrow=10,ncol=4)
[,1] [,2] [,3] [,4]
[1,] 1 1 1 1
[2,] 2 2 2 2
[3,] 3 3 3 3
[4,] 4 4 4 4
[5,] 5 5 5 5
[6,] 6 6 6 6
[7,] 7 7 7 7
[8,] 8 8 8 8
[9,] 9 9 9 9
[10,] 10 10 10 10
> tapply(a, matrix(rep(1:10,4),nrow=10,ncol=4), function(x) { return(x[which(x<0)])})
$`1`
[1] -0.9263866 -0.5380141 -1.2453310
$`2`
numeric(0)
$`3`
[1] -0.3399709
$`4`
numeric(0)
$`5`
numeric(0)
$`6`
[1] -0.1127914
$`7`
[1] -0.5423493 -0.8121652
$`8`
[1] -1.658931
$`9`
numeric(0)
$`10`
[1] -0.85034
您的acm格式不正確,您的功能解決方案無法正常工作:應用不會產生合乎邏輯的結果。 – 2010-11-08 16:39:55
對不起,這些載體的長度不同,但我已經解決了這個問題。 – 2010-11-08 17:34:54