6

我正在通过 org-mode 电子表格使用 emacs-calc,我想计算一列中大于特定值(比如 10)的值的数量。

我目前正在使用 emacs-calc 进行计算,但是如果 emacs-lisp 中有解决方案,那将是非常受欢迎的!

我知道 vcount 会计算向量中的值的数量,但这会计算该向量中的所有值。如何添加条件以便只计算 > 10 的值?

换句话说,我想要一个在这种情况下返回 2 的神秘函数:

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

4 回答 4

4

如何添加条件以便只计算 > 10 的值?

换句话说,我想要一个在这种情况下返回 2 的神秘函数:

神秘函数([2,14,10,3,9,1])

呃,你在那个列表中只有一个大于 10 的值 - 你的意思是 >= 10 吗?

无论如何,我不知道 org-mode 电子表格,但这里是如何在 Emacs Lisp 中做到这一点:

(defun 神秘函数(向量)
  (长度
   (删除如果不是#'(lambda(n)
              (>= n 10))
          (追加向量零))))
于 2012-02-07T13:53:19.637 回答
4

我找到了一个解决方案,使用 emacs-calc,受choroba 的建议启发。

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

因此,为了处理 org-mode 电子表格中的列,我可以这样做,例如:

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

map 函数用于将函数(在这种情况下为匿名函数)应用于向量的每个元素。如果元素大于 10,我们输入 1,否则为空向量。

于 2012-02-08T09:50:48.797 回答
3

您还可以创建一个附加列,其中将包含

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

然后简单地应用于vcount此列。

于 2012-02-07T14:21:23.433 回答
3

由于逻辑运算产生 1 表示真,0 表示假,我们可以简单地对测试求和:

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