Я пытаюсь выучить R и у меня проблемы с тем, как это работает. Я пытался создать энтропийную функцию переменных p
и 1-p
с нуля, и у меня возникают проблемы, когда я пытаюсь добавить несколько if
с, чтобы избежать NaN
при делении на 0.
Когда я пробую пользовательскую энтропию с графиком, она просто работает, но при печати результатов показывает NaN
. Но когда я пытаюсь добавить if
s, то он говорит:
Ошибка в xy.coords (x, y, xlabel, ylabel, log): длины 'x' и 'y'отличаются
entropy <- function(p){
cat("p = " , p)
if (p==0 || p==1) {
result = 0
}else{
result = - p*log2(p)-(1-p)*log2((1-p))
}
cat("\nresult=",result)
return(result)
}
p <- seq(0,1,0.01)
plot(p, entropy(p), type='l', main='Funcion entropia con dos valores posibles')
Я не понимаю этого, поскольку я использую график массива как x
и функцию с этим массивом в качестве параметра как y
, так что это должно бытьодинаковые длины с if
с.
Консоль без if
с:
p = 0 0,01 0,02 0,03 0,04 0,05 0,06 0,07 0,08 0,09 0,1 0,11 0,12 0,13 0,14 0,140,15 0,16 0,17 0,18 0,19 0,2 0,21 0,22 0,23 0,24 0,25 0,26 0,27 0,28 0,29 0,3 0,31 0,32 0,33 0,34 0,35 0,36 0,37 0,38 0,39 0,4 0,41 0,42 0,43 0,44 0,45 0,46 0,47 0,48 0,49 0,5 0,51 0,52 0,53 0,54 0,55 0,56 0,57 0,58 0,59 0,61 0,58 0,53 0,61 0,82 0,53 0,640,65 0,66 0,67 0,68 0,69 0,71 0,72 0,73 0,74 0,75 0,73 0,95 * 0,90 0,01 0,7 0 0 0 0 0 0 0,7 0,8 0,8 0,81 0,92 0,93 0,94 0,94 0,96 0,97 0,98 0,99 1
результат = NaN 0,080794 0,01 0,70 022 028 0,70 029 028 0,7 0 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 6 0 0 0 0 ... 0 0 0 ... 0 0 ... 0,91 0,910 0,95 0,95 0,98 0,99 0 *1025* *1026* 0 = 0,70 028 028 0: 0 0,1 0 0 0 0 = 0 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 0 0 0 = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,.. 0,3274449 0,3659237 0.4021792 0.4364698 0.4689956 0.499916 0.5293609 0.5574382 0.5842388 0.6098403 0.6343096 0.6577048 0.680077 0.7014715 0.7219281 0.7414827 0.7601675 0.7780113 0.7950403 0.8112781 0.8267464 0.8414646 0.8554508 0.8687212 0.8812909 0.8931735 0.9043815 0.9149264 0.9248187 0.9340681 0.9426832 0.9506721 0.958042 0.9647995 0.9709506 0.9765005 0.9814539 0.985815 0.9895875 0.9927745 0.9953784 0.9974016 0.9988455 +0,9997114 1 +0,9997114 0.9988455 0.9974016 0.9953784 0.9927745 0.98958750.985815 0.9814539 0.9765005 0.9709506 0.9647995 0.958042 0.9506721 0.9426832 0.9340681 0.9248187 0.9149264 0.9043815 0.8931735 0.8812909 0.8687212 0.8554508 0.8414646 0.8267464 0.8112781 0.7950403 0.7780113 0.7601675 0.7414827 0.7219281 0.7014715 0.680077 0.6577048 0.6343096 0.6098403 0.5842388 0.5574382 0.5293609 0.499916 0.4689956 0.4364698 0.4021792 0.3659237 0.3274449 0.286397 0.2422922 0.1943919 0.1414405 0.08079314 NaN
Консоль с if
s:
p = 0 0,01 0,02 0,03 0,04 0,05 0,06 0,07 0,08 0,09 0,1 0,11 0,12 0,13 0,14 0,15 0,16 0,17 0,18 0,19 0,2 0,21 0,22 0,23 0,24 0,25 0,26 0,27 0,28 0,29 0,3 0,31 0,32 0,33 0,34 0,35 0,36 0,37 0,38 0,39 0,4 0,41 0,42 0,43 0,44 0,45 0,46 0,47 0,48 0,49 0,5 0,51 0,52 0,53 0,540,55 0,56 0,57 0,58 0,59 0,6 0,6 0,6 0,63 0,6 0,95 0,90 0,90 0,90 0,90 0,96 0,96 0,96 0,96 0,96 0,96 0,96 0,96 0,96 0,96 0,96 0,96 0,96 0,96 0,96 0,96 0,95 0,96 0,97 0,90 0,96 0,96 0,96 0,96 0,96 0,96 0,96 0,96 0,96 0,90 0,90 0,90 0,90 0,90 0,90 0,90 0,90 0,90 0,90 0,90 0,90 0,90 0,90 0,90 0,90 0,90 0,90 0,90 0,90 0,90 0,90 0,90 0,90 0,90 0,90 0,90 0,90 0,90 0,90 0,90 0,90 0,90 0,90 0,90 0,96 0,90xy.coords (x, y, xlabel, ylabel, log): длины 'x' и 'y' отличаются