2013-09-30 3 views
3

В MATLAB, я могу получить количественную оценку того, как сжатое мой код, используя следующий код:Количественная качество кода в R

t = mtree('myCode.m','-file'); 
length(t.nodesize) 

Как CODY (http://www.mathworks.com/matlabcentral/about/cody/) описывает это:

Коди использует вычисление количества узлов для определения размера решения на основе количества узлов в дереве разбора. Подумайте о размере как длины кода. Написание сжатого кода дает вам лучший результат. Комментарии не вносят вклад в размер кода.

Чтобы проиллюстрировать, как Коди определяет размер, вот два решения проблемы плюс-один.

Решение 1 имеет размер 12:

function y = plus_one(x) 
    y = x+1; 
end 

Решение 2 имеет размер 16:

function y = plus_one(x) 
    z = x; 
    y = z+1; 
end 

Есть ли способ, чтобы получить аналогичный расчет для R-код? Существуют ли другие количественные показатели качества кода в R? MATLAB также может измерять сложность МакКейб, например:

mlint -cyc myCode.m 

ответ

2

Может быть, это полезно:

# line1 col1 line2 col2 id parent   token terminal  text 
#33  1 1  1 34 33  0   expr FALSE   
#1  1 1  1 8 1  3   SYMBOL  TRUE plus_one 
#3  1 1  1 8 3  33   expr FALSE   
#2  1 10  1 11 2  33 LEFT_ASSIGN  TRUE  <- 
#32  1 13  1 34 32  33   expr FALSE   
#4  1 13  1 20 4  32  FUNCTION  TRUE function 
#5  1 21  1 21 5  32   '('  TRUE  (
#6  1 22  1 22 6  32 SYMBOL_FORMALS  TRUE  x 
#7  1 23  1 23 7  32   ')'  TRUE  ) 
#29  1 25  1 34 29  32   expr FALSE   
#9  1 25  1 25 9  29   '{'  TRUE  { 
#10  1 26  1 26 10  12   SYMBOL  TRUE  y 
#12  1 26  1 26 12  29   expr FALSE   
#11  1 27  1 27 11  29  EQ_ASSIGN  TRUE  = 
#19  1 28  1 30 19  29   expr FALSE   
#13  1 28  1 28 13  15   SYMBOL  TRUE  x 
#15  1 28  1 28 15  19   expr FALSE   
#14  1 29  1 29 14  19   '+'  TRUE  + 
#16  1 30  1 30 16  17  NUM_CONST  TRUE  1 
#17  1 30  1 30 17  19   expr FALSE   
#18  1 31  1 31 18  29   ';'  TRUE  ; 
#24  1 33  1 33 24  26   SYMBOL  TRUE  y 
#26  1 33  1 33 26  29   expr FALSE   
#25  1 34  1 34 25  29   '}'  TRUE  } 

sum(getParseData(parse(text="plus_one <- function(x) {y=x+1; y}"))$terminal) 
#[1] 15 

sum(getParseData(parse(text="plus_one <- function(x) {z = x; y = z+1; y}"))$terminal) 
#[1] 19 

Я не уверен, если я согласен с общим утверждением, как

Дать лаконичное код дает вам лучший результат.

+1

Чтобы быть справедливым, кажется, что Коди - это своего рода распределенная игра с кодовым мячом в Matlab, поэтому, возможно, «лучше» здесь подразумевается в духе веселья. – joran

Смежные вопросы