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