чем отличаются два кода? - PullRequest
1 голос
/ 23 апреля 2020

Я не знаю, что отличается между двумя кодами. Когда я использую 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)    
}

1 Ответ

1 голос
/ 23 апреля 2020

ml.norm

ЕСЛИ x IS data.frame DO конвертировать его в матрицу. ПОТОМ проверяйте режим и ДЕЛАЙТЕ вещи.

dh.norm

ЕСЛИ Х ЕСТЬ data.frame, СДЕЛАЙТЕ конвертировать его в матрицу. Затем проверьте, является ли x матрицей, и примените dh.norm к столбцам. ТОГДА проверьте режим и ДЕЛАЙТЕ вещи.

Так что ml.norm пропускает часть return(apply(x,2,[YOUR FUNCTION],mode=mode,na.rm=na.rm)), если вы запускаете ее на data.frame.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...