全部, 我有以下代碼,我想將它推廣到更多的羣集,即C羣集。有沒有辦法做到這一點沒有循環?這裏,X的行對應於變量x1,x2,T是X的線性變換。謝謝。使用矩陣運算矩陣求矩陣
X=matrix(c(2,3,4,5,6,7,8,9,2,3,4,5,6,7,8,9),2)
cluster=c(1,1,1,0,0,0,0,0)
T=matrix(c(1,2,2,1),2)
f<-function(x) max(eigen(t(x)%*%x)$values)
f(T%*%X[,cluster==0])+f(T%*%X[,cluster==1])
## [1] 1134.87
我在想
sum(tapply(X,cluster,function(x) f(T%*%x)))
,但我得到這個錯誤,我想是因爲tapply需要一個向量VS矩陣:
> sum(tapply(X,cluster,function(x) f(T%*%x)))
Error in tapply(X, cluster, function(x) f[x]) :
arguments must have same length
這裏是一個for循環的答案,如果你能找到沒有迴路的東西,請讓我知道
#
c=length(levels(factor(cluster)))
cluster=factor(cluster,labels=1:c)
s=0
for (i in 1:c){
s=s+f(T%*%X[,cluster==c])
}
s
## [1] 1134.872
這樣做,你應該叫'F'用圓括號中,'F()' – Frank
不,T%*%X不是正方形的,這就是爲什麼f爲以T(X )%*%x做一個正方形矩陣。 T是X的線性變換,我正在研究如何影響編號爲0和1的集羣的主要組件。 – Rik