R 用户定义函数内部和外部的结果不同,为什么?

R 用户定义函数内部和外部的结果不同,为什么?,r,function,R,Function,我有一个函数,用于计算一个名为“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)

我有一个函数,用于计算一个名为“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)
}
它返回:

[1] Inf Inf Inf Inf Inf Inf Inf Inf Inf Inf
但如果我独立计算函数的每个部分,结果将是:

[1] -Inf  NaN  NaN -Inf 0.3333333  NaN  NaN  NaN  NaN 0.0000000

为什么会发生这种情况,以及如何在以后的编程中防止这种情况发生?

这些行是问题所在:

gutt<<- ifelse(gutt<0,0,1)

antigutt<<- ifelse(antigutt<0,1,0)

函数同意逐行运行代码。

谢谢。它解决了问题。全局变量和局部变量之间是否存在差异?是的。您已经创建了局部变量,默认情况下这些名称(
gutt
antigutt
)将使用这些局部变量。但是
我明白了。所以在以后的使用中我应该避免

gutt<<- ifelse(gutt<0,0,1)

antigutt<<- ifelse(antigutt<0,1,0)
gutt<- ifelse(gutt<0,0,1)

antigutt<- ifelse(antigutt<0,1,0)