我正在通过org-mode电子表格使用emacs-calc,我想计算一列中大于特定值(比如10)的值。
我目前正在使用emacs-calc进行计算,但如果emacs-lisp中有解决方案,那将非常受欢迎!
我知道vcount会计算向量中的值的数量,但是会计算该向量中的所有值。我怎样才能添加一个条件,以便只有值>算了10个?
换句话说,我想要一个在这种情况下会返回2的mysterious_function:
mysterious_function([2,14,11,3,9,1])
答案 0 :(得分:4)
如何添加条件以便只显示值>算了10个?
换句话说,我想要一个在这种情况下会返回2的mysterious_function:
mysterious_function([2,14,10,3,9,1])
呃,你在该列表中只有一个值大于10 - 你的意思是> = 10?
无论如何,我不知道org-mode电子表格,但这里是如何在Emacs Lisp中做到的:
(defun mysterious-function (vector) (length (remove-if-not #'(lambda (n) (>= n 10)) (append vector nil))))
答案 1 :(得分:4)
坦克全部为您的答案。我找到了一个使用emacs-calc的解决方案,灵感来自choroba的提议。
vcount(map(<if(gt(#1,10), 1, [])>, [15,2,5,13]))
因此,为了处理组织模式电子表格中的列,我可以这样做,例如:
vcount(map(<if(gt(#1,10), 1, [])>, @I..@II))
map函数用于将函数(在这种情况下为匿名函数)应用于向量的每个元素。如果元素大于10,我们放1,否则为空向量。
答案 2 :(得分:3)
您还可以创建一个包含
的附加列if($2>10,1,string(""))
然后只需在此列上应用vcount
。
答案 3 :(得分:2)
由于logical operations生成1为真,0为假,我们可以简单地sum测试:
vsum(map(<gt(#1,10)>,@I..@II))