MCDM
=
function (decision
=
NULL, weights
=
NULL, impacts
=
NULL)
{
if
(missing(weights))
stop(
"缺少'权重向量-weights'"
)
if
(missing(impacts))
stop(
"缺少'影响因子-impacts'"
)
if
(!
is
.matrix(decision) |
is
.data.frame(decision))
stop(
"'决策矩阵-decision'必须是矩阵或数据框"
)
if
(length(weights) !
=
ncol(decision))
stop(
"权重向量长度错误"
)
if
(length(impacts) !
=
ncol(decision))
stop(
"影响因子长度错误"
)
if
(!
all
(weights >
0
))
stop(
"权重必须大于零"
)
if
(!
is
.character(impacts))
stop(
"影响因子必须是字符型 '+'或'-' 符号"
)
if
(!
all
(impacts
=
=
"+"
| impacts
=
=
"-"
))
stop(
"影响因子只能是字符型 '+'或'-' 符号"
)
weights <
-
weights
/
sum
(weights)
N <
-
matrix(nrow
=
nrow(decision), ncol
=
ncol(decision))
for
(i
in
1
:nrow(decision)) {
for
(j
in
1
:ncol(decision)) {
N[i, j] <
-
decision[i, j]
/
sqrt(
sum
(decision[, j]^
2
))
}
}
W
=
diag(weights)
V
=
N
%
%
W
u <
-
as.integer(impacts
=
=
"+"
)
&nbs