From: Christian Moe <mail@christianmoe.com>
To: nicholas.dokos@hp.com
Cc: Jude DaShiell <jdashiel@shellworld.net>, emacs-orgmode@gnu.org
Subject: Re: unexpected failure on all formulas
Date: Tue, 20 Sep 2011 11:29:00 +0200 [thread overview]
Message-ID: <4E785CDC.9070503@christianmoe.com> (raw)
In-Reply-To: <19773.1316507170@alphaville.dokosmarshall.org>
Hi, Nick,
I think your vmode() needs to subtract one from the result. The mode
in the "systolic" column of Jude's dataset should be 124 (f=12), not
125 (f=2).
For Jude's limited purposes I got by with less code (but note the
caveats):
#+begin_src emacs-lisp
(defmath vmode (vec)
"Returns the mode (most frequent value) of a unimodal vector of
integers VEC. WARNING: Will not work with non-integer values or
multiple vectors. Will only return the lowest mode for multimodal
data."
(let ((freq (histogram vec (1+ (vmax vec)))))
(1- (find freq (vmax freq)))))
#+end_src
Using :=vmode(@I..@II), I get 124 (systolic), 80 (diastolic), 68 (pulse).
Yours,
Christian
On 9/20/11 10:26 AM, Nick Dokos wrote:
> Nick Dokos<nicholas.dokos@hp.com> wrote:
>
>> Jude DaShiell<jdashiel@shellworld.net> wrote:
>>
>>
>>> |------------------------+----------+-----------+-------|
>>> | mode | | | |
>>> | Min | | | |
>>> | Max | 127. | 81. | 74. |
>>> #+TBLFM: @>>>$2..@>>>$4=vmode(@i..@ii) :: @>>$2..@>>$4=vmin(@i..@ii) :: @>$2..@>$4=vmax(@i..@ii)
>>>
>>>
>>> # Local Variables:
>>> # kept-new-versions: 100
>>> # version-control: t
>>> # End:
>>> cut here.
>>> What did I do wrong with this #+TBLFM: line?
>>>
>>
>> Two things:
>>
>> o as Christian Moe pointed out, calc does not provide a vmode() function.
>>
>> o the separator lines in the formulas have to be specified using capital
>> I letters.
>>
>
> Here is an implementation of vmode - afaict, it works correctly but
> that may be because I've only tested it on a single set of data. If
> you find something wrong, please let me know.
>
> --8<---------------cut here---------------start------------->8---
> | Date Stamp | Systolic | Diastolic | Pulse |
> |------------------------+----------+-----------+-------|
> | [2011-07-19 Tue 02:26] | 138 | 92 | 74 |
> | [2011-07-20 Wed 04:03] | 130 | 85 | 74 |
> | [2011-07-21 Thu 03:50] | 128 | 79 | 76 |
> | [2011-07-22 Fri 02:33] | 121 | 80 | 79 |
> | [2011-07-23 Sat 02:52] | 118 | 75 | 68 |
> | [2011-07-24 Sun 04:13] | 126 | 83 | 78 |
> | [2011-07-25 Mon 02:12] | 122 | 79 | 76 |
> | [2011-07-26 Tue 01:57] | 124 | 79 | 72 |
> | [2011-07-27 Wed 04:03] | 137 | 74 | 76 |
> | [2011-07-28 Thu 03:47] | 136 | 80 | 76 |
> | [2011-07-29 Fri 04:06] | 120 | 72 | 76 |
> | [2011-07-30 Sat 03:18] | 128 | 92 | 80 |
> | [2011-07-31 Sun 07:11] | 124 | 84 | 72 |
> | [2011-08-01 Mon 04:55] | 124 | 77 | 69 |
> | [2011-08-02 Tue 02:47] | 128 | 80 | 67 |
> | [2011-08-03 Wed 06:00] | 132 | 89 | 70 |
> | [2011-08-04 Thu 04:30] | 137 | 82 | 77 |
> | [2011-08-05 Fri 06:10] | 124 | 86 | 77 |
> | [2011-08-06 Sat 04:04] | 139 | 88 | 78 |
> | [2011-08-07 Sun 04:02] | 124 | 80 | 68 |
> | [2011-08-08 Mon 06:36] | 137 | 93 | 79 |
> | [2011-08-10 Wed04:03] | 120 | 80 | 68 |
> | [2011-08-11 Thu 04:30] | 128 | 78 | 77 |
> | [2011-08-12 Fri 06:36] | 143 | 82 | 76 |
> | [2011-08-13 Sat 06:18] | 125 | 76 | 69 |
> | [2011-08-14 Sun 04:04] | 123 | 70 | 69 |
> | [2011-08-15 Mon 04:04] | 135 | 83 | 76 |
> | [2011-08-16 Tue 04:03] | 128 | 80 | 69 |
> | [2011-08-17 Wed 04:04] | 124 | 80 | 68 |
> | [2011-08-18 Thu 05:58] | 136 | 87 | 72 |
> | [2011-08-19 Fri 05:50] | 116 | 80 | 64 |
> | [2011-08-20 Sat 06:38] | 139 | 84 | 64 |
> | [2011-08-21 Sun 08:20] | 124 | 84 | 73 |
> | [2011-08-22 Mon 03:50] | 138 | 76 | 70 |
> | [2011-08-23 Tue 05:52] | 126 | 79 | 68 |
> | [2011-08-24 Wed 04:53] | 125 | 81 | 64 |
> | [2011-08-25 Thu 05:37] | 124 | 79 | 68 |
> | [2011-08-26 Fri 06:41] | 124 | 87 | 74 |
> | [2011-08-27 Sat 05:44] | 133 | 74 | 61 |
> | [2011-08-28 Sun 03:22] | 124 | 76 | 61 |
> | [2011-08-29 Mon 04:06] | 124 | 76 | 65 |
> | [2011-08-30 Tue 05:52] | 139 | 87 | 71 |
> | [2011-08-31 Wed 06:47] | 152 | 86 | 68 |
> | [2011-09-01 Thu 06:00] | 136 | 86 | 78 |
> | [2011-09-02 Fri 01:22] | 142 | 100 | 78 |
> | [2011-09-03 Sat 09:12] | 126 | 79 | 70 |
> | [2011-09-04 Sun 11:53] | 130 | 90 | 72 |
> | [2011-09-05 Mon 06:29] | 138 | 77 | 65 |
> | [2011-09-06 Tue 05:42] | 121 | 76 | 68 |
> | [2011-09-07 Wed 06:47] | 131 | 77 | 68 |
> | [2011-09-08 Thu 06:02] | 122 | 76 | 72 |
> | [2011-09-10 Sat 05:38] | 126 | 76 | 69 |
> | [2011-09-11 Sun 10:12] | 137 | 87 | 64 |
> | [2011-09-12 Mon 04:00] | 135 | 78 | 89 |
> | [2011-09-13 Tue 06:00] | 132 | 82 | 66 |
> | [2011-09-14 Wed 06:01] | 137 | 77 | 77 |
> | [2011-09-15 Thu 04:08] | 141 | 87 | 64 |
> | [2011-09-17 Sat 08:35] | 121 | 78 | 66 |
> | [2011-09-18 Sun 07:04] | 124 | 69 | 65 |
> | [2011-09-19 Mon 06:00] | 133 | 81 | 69 |
> |------------------------+----------+-----------+-------|
> | mode | 125 | 81 | 69 |
> | min | 116 | 69 | 61 |
> | max | 152 | 100 | 89 |
> #+TBLFM: @>>>$2..@>>>$4=vmode(@I..@II) :: @>>$2..@>>$4=vmin(@I..@II) :: @>$2..@>$4=vmax(@I..@II)
>
> #+begin_src elisp
>
> (defun calcFunc-vmode (&rest vecs)
> (let* ((flat (copy-sequence (cdr (math-flatten-many-vecs vecs))))
> (p flat)
> (len (length flat))
> (hlen (/ len 2)))
> (if (= len 0)
> (math-reject-arg nil "*Must be at least 1 argument")
> (if (and (= len 1) (memq (car-safe (car flat)) '(sdev intv)))
> (calcFunc-vmean (car flat))
> (while p
> (if (eq (car-safe (car p)) 'sdev)
> (setcar p (nth 1 (car p))))
> (or (Math-anglep (car p))
> (math-reject-arg (car p) 'anglep))
> (setq p (cdr p)))
> (setq flat (sort flat 'math-lessp))
> (setq freqs (vfreqs flat))
> (cadr (maxfreq freqs))
> ))))
>
> (defun vfreqs (v)
> "v is assumed to be sorted.
> Return a list of pairs: (count element)
> for each distinct element of v."
> (let ((count 0)
> (prev (car v))
> (vec v)
> freqs)
> (setq freqs nil)
> (while vec
> (if (= (nth 0 vec) prev)
> (setq count (1+ count))
> (setq freqs (cons (list count (nth 0 vec)) freqs))
> (setq count 1 prev (nth 0 vec)))
> (setq vec (cdr vec)))
> freqs))
>
> (defun freq-greater (a b)
> (if (> (car a) (car b))
> t
> nil))
>
> (defun maxfreq (f)
> "Sort the frequency list by count and return the first pair."
> (let ((fs (sort f 'freq-greater)))
> (nth 0 fs)))
>
> #+end_src
> --8<---------------cut here---------------end--------------->8---
>
> I cribbed heavily from the implementation of vmedian. Although there is
> no key binding, you can even use the above in an interactive Calc
> session, by entering the formula in algebraic form. I yanked the vector
> twice onto the Calc stack and then entered 'vmode($) with the following
> result:
>
> ,----
> | --- Emacs Calculator Mode ---
> | 2: [138, 130, 128, 121, 118, 126, 122, 124, 137, 136, 120, 128, 124, 124, 128, 132, 137, 124, 139,
> | 124, 137, 120, 128, 143, 125, 123, 135, 128, 124, 136, 116, 139, 124, 138, 126, 125, 124, 124,
> | 133, 124, 124, 139, 152, 136, 142, 126, 130, 138, 121, 131, 122, 126, 137, 135, 132, 137, 141,
> | 121, 124, 133]
> | 1: 125
> | .
> `----
>
> Nick
>
>
next prev parent reply other threads:[~2011-09-20 9:28 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-09-20 0:41 unexpected failure on all formulas Jude DaShiell
2011-09-20 6:17 ` Nick Dokos
2011-09-20 8:26 ` Nick Dokos
2011-09-20 9:15 ` Lawrence Mitchell
2011-09-20 9:29 ` Christian Moe [this message]
2011-09-20 14:59 ` Nick Dokos
2011-09-20 16:30 ` Nick Dokos
2011-09-20 20:28 ` Christian Moe
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.orgmode.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4E785CDC.9070503@christianmoe.com \
--to=mail@christianmoe.com \
--cc=emacs-orgmode@gnu.org \
--cc=jdashiel@shellworld.net \
--cc=nicholas.dokos@hp.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).