我通过组织模式电子表格使用emacs calc,我想计算一列中大于特定值(比如10)的值的数量。
我目前正在使用emacs-calc进行计算,但如果emacs-lisp中有解决方案,那将是非常受欢迎的!
我知道vcount会计算向量中的值的数量,但它会计算该向量中的所有值。如何添加一个条件,以便只计算>10的值?
换句话说,我想要一个mysterious_function,在这种情况下会返回2:
mysterious_function([2,14,11,3,9,1])
如何添加一个条件,以便只计算>10的值?
换句话说,我想要一个mysterious_function,在这种情况下会返回2:
mysterious_function([2,14,10,3,9,1])
呃,你在这个列表中只有一个值大于10——你的意思是>=10吗?
无论如何,我不知道组织模式的电子表格,但以下是如何在Emacs Lisp:中做到这一点
(defun神秘函数(vector)(长度(如果不是#'则移除(lambda(n)(>=n 10)(追加向量nil)))
受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,否则为空向量。
您还可以创建一个包含的附加列
if($2>10,1,string(""))
然后简单地在此列上应用vcount
。
由于逻辑运算为true产生1,为false产生0,我们可以简单地对测试求和:
vsum(map(<gt(#1,10)>,@I..@II))