首页 > 解决方案 > 两个代码有什么不同?

问题描述

我不知道两个代码之间有什么不同。当我使用ml.norm(iris[1:4], mode="uv",na.rm=FALSE)dh.norm(iris[1:4], mode="uv",na.rm=FALSE),结果不同..`

ml.norm <- function(x, mode="uv", na.rm=FALSE){
if(class(x)=="data.frame"){
    x <- as.matrix(x)
} 
else{
    return (apply(x,2,ml.norm, mode=mode, na.rm=na.rm))
}
if (mode =="uv"){
    x = x/sd(x, na.rm=na.rm)
}
else if (mode =="z"){
    x = (x-mean(x))/sd(x, na.rm=na.rm)
}
else{stop(paste("unknow mode", mode))}
return(x)
}


dh.norm <- function (x,mode="uv",na.rm=FALSE) {
# need to check if x is a matrix
if (is.data.frame(x)) {
    x=as.matrix(x)
}
if (is.matrix(x)) {
    return(apply(x,2,dh.norm,mode=mode,na.rm=na.rm))
}
if (mode == "uv") {
    x = x/sd(x,na.rm=na.rm)
} else if (mode == "z") {
    # your code here
    x = (x - mean(x))/sd(x,na.rm=na.rm)
} else {
    stop(paste("unknown mode",mode))
}
return(x)    
}

标签: r

解决方案


ml.norm

IF x IS data.frame 将其转换为矩阵。然后检查模式并做一些事情。

dh.norm

IF x IS a data.frame DO 将其转换为矩阵。然后检查 x 是否为矩阵并在列上应用 dh.norm。然后检查模式并做一些事情。

如果您在data.frame 上运行它,ml.norm则缺少该部分。return(apply(x,2,[YOUR FUNCTION],mode=mode,na.rm=na.rm))


推荐阅读