0
我有一個計算索引'MCI'的函數。代碼是用戶定義函數內部和外部的不同結果,爲什麼?
mci<-function(Data){
N<-dim(Data)[1]
L<-dim(Data)[2]
r <- rowSums(Data)
i.sc <- colSums(Data)
r.matrix <- matrix(r,N,1) %*% matrix(1,1,L)
p.cor.i <- (i.sc/N)
p.cor.i.matrix <- t(matrix(p.cor.i,L,N))
gutt <- r.matrix - t(matrix(1:L,L,N))
gutt<<- ifelse(gutt<0,0,1)
antigutt <- (L-r.matrix) - t(matrix(1:L,L,N))
antigutt<<- ifelse(antigutt<0,1,0)
Covgp<-diag(cov(t(gutt),t(p.cor.i.matrix)))
Covdp<-diag(cov(t(Data),t(p.cor.i.matrix)))
Covagp<-diag(cov(t(antigutt),t(p.cor.i.matrix)))
MCI <- (Covgp-Covdp)/(Covgp-Covagp)
return(MCI)
}
上的數據集是這樣的:
V1 V2 V3 V4 V5 V6
1 1 1 1 1 0 1
2 0 0 0 1 0 0
3 1 1 0 1 1 1
4 1 1 1 1 0 1
5 1 0 1 0 0 0
6 1 1 1 1 1 1
7 1 1 1 0 1 1
8 0 1 1 1 1 1
9 1 1 0 1 1 1
10 0 1 1 0 0 0
它返回:
[1] Inf Inf Inf Inf Inf Inf Inf Inf Inf Inf
但如果我計算函數的每個部分獨立地結果將是:
[1] -Inf NaN NaN -Inf 0.3333333 NaN NaN NaN NaN 0.0000000
爲什麼發生這種情況,我如何在將來的編程中阻止這種情況?
Thanks.It解決了這個問題。它是全局變量還是局部變量? – Amin
是的。你已經創建了局部變量,這些變量默認使用這些名稱('gutt'和'antigutt')。但'<< - '賦值修改了一個不同的環境,因此是一個不同的變量。 –
我明白了。所以在將來的使用中,我應該避免使用'<< - '對嗎?我是根據一個建議做到的。 – Amin