File: medianaxis.circular.R

package info (click to toggle)
r-cran-circular 0.5-1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,492 kB
  • sloc: ansic: 464; fortran: 69; sh: 13; makefile: 2
file content (59 lines) | stat: -rw-r--r-- 2,044 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
medianaxis <- function(x, na.rm, ...) UseMethod("medianaxis")
medianaxis.default <- function(x, na.rm, ...) .NotYetImplemented()

#############################################################
#                                                           
#   medianaxis.circular function                                  
#   Author: Claudio Agostinelli and Alessandro Gagliardi
#   E-mail: claudio@unive.it                                
#   Date: August, 3, 2011
#   Version: 0.1                                          
#                                                           
#   Copyright (C) 2012 Claudio Agostinelli and Alessandro Gagliardi
#                                                           
#############################################################

medianaxis.circular <- function(x, na.rm=FALSE, ...) {
  if (na.rm)
    x <- x[!is.na(x)]
  if (length(x)==0) {
    warning("No observations (at least after removing missing values)")
    return(NULL)
  }

  if (is.circular(x)) {
    dc <- circularp(x)
  } else {
    dc <- list(type="angles", units="radians", template="none", modulo="asis", zero=0, rotation="counter")
  }
  x <- conversion.circular(x, units="radians", zero=0, rotation="counter")
  attr(x, "class") <- attr(x, "circularp") <-  NULL
  circmedianaxis <- MedianAxisCircularRad(x)
  circmedianaxis <- conversion.circular(circular(circmedianaxis$medianaxis), dc$units, dc$type, dc$template, dc$modulo, dc$zero, dc$rotation)
  return(circmedianaxis)
}

MedianAxisCircularRad <- function(x) {
  n <- length(x)
  y <- c(x, x+pi)
  y <- sort(y %% (2*pi))
  if (odd <- as.logical(n%%2)) {
  ## odd number of observations
    ismedianaxis <- rep(FALSE, n)
    for (i in 1:length(x)) {
      z <- MinusPiPlusPiRad((x-x[i])%%(2*pi))
      pos <- sum(z > 0 & z != pi)
      neg <- sum(z < 0 & z !=-pi)
      zero <- sum(z==0)
      atpi <- sum(z==pi | z==-pi)
###      ismedianaxis[i] <- pos == (neg)
    }
  } else {
  ## even number of observations    
    eps <- min(diff(y), y[1]+(2*pi-y[2*n]))/4 


  }
}