r - 为什么此代码从 data.frame 更改为 matrix 不适用于模式“qn”?
问题描述
实际上,对于其他模式,x=as.matrix(x) 运行良好,但对于 mode="qn",它不起作用并触发了错误。像这样 :
mm.norm(iris[1:4],"qn")
apply(x, 2, rank, ties.method = "first") 中的错误:dim(X) 必须具有正长度
iris 是数据框
代码是
function(x, mode, na.rm=FALSE){
if(class(x)=="data.frame"){
x = as.matrix(x)
}
if(class(x)=="matrix"){
return (apply(x,2,mm.norm, mode=mode, na.rm=na.rm))
}
if (mode =="uv"){
x = x/sd(x, na.rm=na.rm)
}
else if (mode =="fs"){
x = ((x-min(x)/max(x)-min(x)))
}
else if (mode =="qn"){
x.rank= apply(x,2, rank, ties.method="first")
x.sort=apply(x,2, sort)
x.mean= apply(x.sort,1,mean)
itm<-function(x.rank,x.mean){
return(x.mean[x.rank])
}
x=apply(x.rank,2,itm,x.mean)
}
else if (mode =="z"){
x = (x-mean(x))/sd(x, na.rm=na.rm)
}
else{stop(paste("unknow mode", mode))}
return(x)
}
解决方案
我认为这里有错误:
if(class(x)=="matrix"){
return (apply(x,2,mm.norm, mode=mode, na.rm=na.rm))
}
老实说,我不知道为什么这部分代码在这里,也许你可以把它去掉。第一个 if 语句检查输入(矩阵:是/否)。第二个运行函数递归,但我不明白为什么。
但是,我很好奇:你的模式fs
:你确定吗,它是
((x-min(x)/max(x)-min(x)))
我不知道你应该做什么,但我会期待
(x-min(x)) / (max(x) - min(x))
推荐阅读
- html - 是否可以将 Wordpress 模板(Semplice)和一些 HTML 和 CSS 页面结合起来?
- javascript - 即使 Token 不为空,JWT 解码也会重新调整为空
- data-science - 从热图中了解相关性
- html - 当第一个卡头有断字而第二个卡头没有时如何对齐 bootstrap-4 卡
- spring - 有没有办法从 ClientRegistration 对象中查找 OAuth2 提供者 ID?
- permissions - 可写文件夹的问题
- python - 使用烧瓶用户登录/身份验证保护页面
- python - 按日期订购活动
- python - 如何检查列表列表中是否存在重复列表?
- mongodb - 如何在不丢失原始结构的情况下重建这个深度展开的对象?