6

org-mode スプレッドシートで emacs-calc を使用していますが、特定の値 (たとえば 10) より大きい列の値の数を数えたいと考えています。

私は現在、計算に emacs-calc を使用していますが、emacs-lisp で解決策があれば大歓迎です!

vcount がベクトル内の値の数をカウントすることは知っていますが、それはそのベクトル内のすべての値をカウントします。10 を超える値のみがカウントされるように条件を追加するにはどうすればよいですか?

つまり、そのような場合に 2 を返す Mystery_function が必要です。

mysterious_function([2,14,11,3,9,1])
4

4 に答える 4

4

choroba の提案に触発されて、emacs-calc を使用して解決策を見つけました。

vcount(map(<if(gt(#1,10), 1, [])>, [15,2,5,13]))

したがって、組織モードのスプレッドシートで列を処理するには、たとえば次のようにします。

vcount(map(<if(gt(#1,10), 1, [])>, @I..@II))

map 関数は、ベクトルの各要素に関数 (この場合は無名関数) を適用するために使用されます。要素が 10 より大きい場合は 1 を、それ以外の場合は空のベクトルを配置します。

于 2012-02-08T09:50:48.797 に答える
4

10 を超える値のみがカウントされるように条件を追加するにはどうすればよいですか?

つまり、そのような場合に 2 を返す Mystery_function が必要です。

不思議な関数([2,14,10,3,9,1])

ええと、そのリストには 10 より大きい値が1 つしかありません。つまり >= 10 ですか?

とにかく、組織モードのスプレッドシートについては知りませんが、Emacs Lisp でそれを行う方法は次のとおりです。

(defun 不思議な関数 (ベクトル)
  (長さ
   (remove-if-not #'(lambda (n)
              (>= n 10))
          (ベクトル nil を追加))))
于 2012-02-07T13:53:19.637 に答える
3

を含む追加の列を作成することもできます

if($2>10,1,string(""))

そして、vcountこの列に適用するだけです。

于 2012-02-07T14:21:23.433 に答える
3

論理演算は true の場合は 1、false の場合は 0 を生成するため、単純にテストを合計できます。

vsum(map(<gt(#1,10)>,@I..@II))
于 2015-03-03T11:08:37.873 に答える