返回函数中的值并获取NULL

时间:2017-02-21 19:38:31

标签: r function return

我正在尝试构建此功能。但是我不知道为什么我打电话时函数的输出不会出现。 这是我创建的功能:

df = data.frame(matrix(rnorm(100), nrow=10))
Criterio<-rep('+',7)

modtop<-function(Tpropio,Criterio){
suma<- apply(Tpropio,2,sum)
P<-sweep(Tpropio, 2, suma, `/`) 
maximo<-apply(P,2,max)
minimo<-apply(P,2,min)
desviacion<-apply(P,2,sd)
W<-desviacion/sum(desviacion)
ncriterios<-length(suma)
ideal<-vector(mode="numeric",length=ncriterios)
nadir<-vector(mode="numeric",length=ncriterios)
for(i in 1:ncriterios){
  if(Criterio[i]=='+'){
    ideal[i]=maximo[i]
    nadir[i]=minimo[i]
    }else{
      ideal[i]=minimo[i]
      nadir[i]=maximo[i]
    }
  }
}
dipos<-matrix(data=NA,ncol=ncriterios,nrow=dim(P)[1])
for(i in 1:ncriterios){
  dipos[,i]<-(P[,i]-ideal[i])^2*W[i]
}
dipos<-apply(dipos,1,sum)
dipos<-sqrt(dipos)

dineg<-matrix(data=NA,ncol=ncriterios,nrow=dim(P)[1])
for(i in 1:ncriterios){
  dineg[,i]<-(P[,i]-nadir[i])^2*W[i]
}
dineg<-apply(dineg,1,sum)
dineg<-sqrt(dineg)
T<-dineg+dipos
T<-dineg/T
resulT<-data.frame(T)
row.names(resulT)<-row.names(Tpropio)
return(resulT)
}

定义函数后,当我使用它时,我有一个是NULL,但我不明白为什么。感谢您的帮助,我希望写一个可以理解的问题:D

1 个答案:

答案 0 :(得分:0)

我找到了答案。在第一个中有一个额外的}。结果就是这个结果:

df = data.frame(matrix(rnorm(100), nrow=10))
Criterio<-rep('+',7)
modtop<-function(Tpropio,Criterio){
suma<- apply(Tpropio,2,sum)
P<-sweep(Tpropio, 2, suma, `/`) 
maximo<-apply(P,2,max)
minimo<-apply(P,2,min)
desviacion<-apply(P,2,sd)
W<-desviacion/sum(desviacion)
ncriterios<-length(suma)
ideal<-vector(mode="numeric",length=ncriterios)
nadir<-vector(mode="numeric",length=ncriterios)
for(i in 1:ncriterios){
  if(Criterio[i]=='+'){
    ideal[i]=maximo[i]
    nadir[i]=minimo[i]
    }else{
      ideal[i]=minimo[i]
      nadir[i]=maximo[i]
    }
  }

dipos<-matrix(data=NA,ncol=ncriterios,nrow=dim(P)[1])
for(i in 1:ncriterios){
  dipos[,i]<-(P[,i]-ideal[i])^2*W[i]
}
dipos<-apply(dipos,1,sum)
dipos<-sqrt(dipos)

dineg<-matrix(data=NA,ncol=ncriterios,nrow=dim(P)[1])
for(i in 1:ncriterios){
  dineg[,i]<-(P[,i]-nadir[i])^2*W[i]
}
dineg<-apply(dineg,1,sum)
dineg<-sqrt(dineg)
T<-dineg+dipos
T<-dineg/T
resulT<-data.frame(T)
row.names(resulT)<-row.names(Tpropio)
return(resulT)
}