R 用户定义函数内部和外部的结果不同,为什么?
我有一个函数,用于计算一个名为“MCI”的索引。代码是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<-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)