2013-04-17 18 views
7

zrobiłem następujący eksperyment, ponieważ nie ma żadnej wzmianki o złożonych danych na stronie approx pomocy:Czy ok() jest przeznaczony do użycia z liczbami zespolonymi?

Rgames> zfoo 
[1] 1+ 6i 2+ 7i 3+ 8i 4+ 9i 5+10i 
Rgames> approx(zfoo,n=10) 
$x 
[1] 1.000000 1.444444 1.888889 2.333333 2.777778 3.222222 3.666667 4.111111 
[9] 4.555556 5.000000 

$y 
[1] 6.000000 6.444444 6.888889 7.333333 7.777778 8.222222 8.666667 
[8] 9.111111 9.555556 10.000000 

Kopanie do kodu dla approx, odkryłem, że xy.coords (także widocznie nieudokumentowane dla złożonych danych) traktuje Real oraz części Imag złożonych danych jako części koordynacyjne x i y. Moje pytanie brzmi: czy to zamierzone zachowanie? Zawsze jestem trochę paranoikiem w zależności od funkcji, która nie jest jawnie udokumentowana.

Odpowiedz

6

Wygląda celowe i niezawodne do mnie, jak approx() połączeń regularize.values(), domagającym xy.coords(), które obejmuje ten blok kodu:

else if (is.complex(x)) { 
    y <- Im(x) 
    x <- Re(x) 
    xlab <- paste0("Re(", ylab, ")") 
    ylab <- paste0("Im(", ylab, ")") 
} 

po czym approx() prowadzi tak jak by nie zdałeś to numeryczny (real/racjonalne) wektory x i y.

+0

Dzięki - powinienem był wkopać jedną warstwę głębiej w kod. –

+0

@CarlWitthoft - FWIW, na podstawie komentarza wprowadzającego "regulamin.values" w źródłach R, teraz skłaniam się ku autorom * nie * rozważając jego zastosowanie do liczb zespolonych. Coś nieistotnego, o ile funkcja działa niezawodnie, a twoje zastosowanie ma sens! –