小编hat*_*rix的帖子

在(emacs)lisp中提取/切片/重新排序列表?

在python中,你可能会做类似的事情

i = (0, 3, 2)
x = [x+1 for x in range(0,5)]
operator.itemgetter(*i)(x)
Run Code Online (Sandbox Code Playgroud)

得到(1, 4, 3).在(emacs)lisp中,我编写了这个名为extract的函数,它执行类似的操作,

(defun extract (elems seq)
  (mapcar (lambda (x) (nth x seq)) elems))

(extract '(0 3 2) (number-sequence 1 5))
Run Code Online (Sandbox Code Playgroud)

但我觉得应该有内置的东西?我所知道的是first, last, rest, nth, car, cdr......走的路是什么?〜提前谢谢〜

lisp elisp

6
推荐指数
1
解决办法
1017
查看次数

bash:传递脚本参数

我在提交git项目之前运行了一系列命令,所以我把它放在一个bash脚本中.最后我有一个执行提交的块:

if [ -z $1 ]; then git commit -a -m "no message"; else; git commit -a -m $1; fi
Run Code Online (Sandbox Code Playgroud)

期望消息传递给脚本

$ ./dostuff_then_commit "my message"
Run Code Online (Sandbox Code Playgroud)

当我这样做时,我明白了

fatal: Paths with -a does not make sense.
Run Code Online (Sandbox Code Playgroud)

因为$1已定义但消息未正确传递?任何人都可以看到问题和/或提出解决方案吗?谢谢你.

git bash

6
推荐指数
1
解决办法
4102
查看次数

在python调试器(pdb)中为符号赋值

使用pdb.set_trace(),我试图调试一系列表达式,其中j用作索引变量.j = 0不允许的语句,因为j是保留的符号pdb.我怎么能绕过这个?

python pdb

6
推荐指数
1
解决办法
2219
查看次数

将字符串操作应用于numpy数组?

是否有更好的方法将字符串操作应用于ndarrays而不是迭代它们?我想使用"矢量化"操作,但我只能想到使用map(示例显示)或列表推导.

Arr = numpy.rec.fromrecords(zip(range(5),'as far as i know'.split()),
                            names='name, strings')

print ''.join(map(lambda x: x[0].upper()+'.',Arr['strings']))
=> A.F.A.I.K.
Run Code Online (Sandbox Code Playgroud)

例如,在R语言中,字符串操作也是矢量化的:

> (string <- unlist(strsplit("as far as i know"," ")))
[1] "as"   "far"  "as"   "i"    "know"
> paste(sprintf("%s.",toupper(substr(string,1,1))),collapse="")
[1] "A.F.A.I.K."
Run Code Online (Sandbox Code Playgroud)

python numpy

6
推荐指数
2
解决办法
1万
查看次数

有效地解锁SQLite数据库

我有一个经常崩溃的程序(Zotero),它的SQLite数据库被锁定并且无法访问重启程序使用,除非我重启(我真的想避免).所以这不起作用(使用通用名称db.sqlite代替我的实际文件zotero.sqlite):

sqlite3 db.sqlite
sqlite> .backup main backup.sqlite
Error: database is locked
Run Code Online (Sandbox Code Playgroud)

根据这里的答案,我试过:

echo ".dump" | sqlite3 db.sqlite | sqlite3 db.sqlite2
mv db.sqlite2 db.sqlite
Run Code Online (Sandbox Code Playgroud)

db.sqlite2是0KB所以这显然不起作用.受到另一个线程的启发,我也试过了

echo '.dump' | sqlite3 db.sqlite > db.dump
cat db.dump | sqlite3 db.sqlite2
mv db.sqlite2 db.sqlite
Run Code Online (Sandbox Code Playgroud)

导致db.sqlite2文件大小略小db.sqlite,而Zotero(需要数据库的文件)无法识别其内容.

所以这似乎是一种非常强力的方式,但是有效:

cp -pv db.sqlite db.sqlite2
rm -f db.sqlite
mv db.sqlite2 db.sqlite
Run Code Online (Sandbox Code Playgroud)

我想知道这个解决方案是否有任何缺点,以及为什么在此之前提出其他方法.

sqlite

6
推荐指数
1
解决办法
2656
查看次数

使用ggplot2语法创建模板?

我想知道是否可以在ggplot2中创建一组类似的数字,并以某种方式更改数据.例如,我可以创建一个函数来完成这个任务:

plot1 <- function(data) ggplot(data) + geom_line(aes(x,y)) + theme_bw()
plot1(data)
plot1(newdata)
Run Code Online (Sandbox Code Playgroud)

但是有可能以某种方式保存和重用一组组件吗?(显然这不起作用):

g <- geom_line(aes(x,y)) + theme_bw()
ggplot(data) + g
ggplot(newdata) + g
Run Code Online (Sandbox Code Playgroud)

r ggplot2

6
推荐指数
1
解决办法
1074
查看次数

如何将geom_abline添加到ggpairs?

我想创建这样的东西

library(lattice)
splom(~iris[1:4], groups = Species, data = iris,
      panel=function(x,y,...) {
        panel.abline(0,1)
        panel.superpose(x,y,...)
      })

library(ggplot2)
library(gridExtra)
library(GGally)
ggpairs(iris,columns=1:4,colour="Species") +
  geom_abline(intercept=0,slope=1)
Run Code Online (Sandbox Code Playgroud)

对于该geom_abline元素,我收到错误(“二元运算符的非数字参数”)。

我怎样才能让它发挥作用?

r ggplot2 ggally

6
推荐指数
1
解决办法
1615
查看次数

是否使用由另一个包导入的包是unpythonic,还是应该直接导入它?

例如,我想使用numpyisnan功能.我已经加载了pandas库:

import pandas as pd

pd.np.isnan(1) #=> False
Run Code Online (Sandbox Code Playgroud)

这有效,但这有什么不利之处吗?或者我应该写

import pandas as pd
import numpy as np

np.isnan(1) #=> False
Run Code Online (Sandbox Code Playgroud)

什么是好习惯?

python import

6
推荐指数
1
解决办法
90
查看次数

OS X上的Emacs 23 - 使用多个实例还是emacsclient?

我想知道是否有人对OS X上的emacs 23的设置有任何建议.我已经使用Linux/Windows一段时间了,我只打开了很多emacs实例,它们是自包含的 - 例如,我可以在单独的框架中有两个单独的文件,每个文件都有自己的R,Python和/或shell运行.我认为这是不赞成的(?) - 但它保持每个脚本文件的工作目录分开,我喜欢.

我知道在我的.emacs文件中设置(server-start)并调用'emacsclient'而不是'Emacs'现在是首选方式(?)有一些优点.我发现这个线程可以通过Applescript来实现这一点: Emacs 23,OS X,multi-tty和emacsclient

但我想知道这是否是唯一可行的方法 - 当我在OS X上打开两个emacs实例时它会给我错误:

** CFMessagePort: bootstrap_register(): failed 1100 (0x44c) 'Permission denied', port = 0x3803, name = 'org.gnu.Emacs.ServiceProvider'
Run Code Online (Sandbox Code Playgroud)

但打开一个新框架允许我编辑文件.据我所知,对于OS X上的vim,有一个名为'mvim'的东西允许启动多个vim实例,但是对于emacs有类似的东西吗?很抱歉这个冗长的问题 - 总之,我想这些是我想征求你的专业知识的问题:

(1)'emacsclient'是专家的方式,(2)如果不一定,是否有办法在OS X上运行多个emacs 23(不仅仅是帧)实例?

谢谢!

macos emacs emacs23

5
推荐指数
2
解决办法
4656
查看次数

关于python-mode函数的Emacs defadvice

在python-mode中,有一个名为py-execute-region的函数,它将突出显示的代码区域发送到Python缓冲区进行评估.在评估之后,光标位于Python缓冲区中,但我希望它保留在脚本缓冲区中,以便我可以继续生成更多代码.我写了一个简单的建议功能:

(defadvice py-execute-region                                                
   (after py-execute-region-other-window activate)                          
   """ After execution, return cursor to script buffer """                  
   (other-window 1)                                                         
) 
Run Code Online (Sandbox Code Playgroud)

但这根本不起作用.我尝试过其他变种,比如使用'around'而不是'after'; 将变量设置为脚本缓冲区名称,然后弹出缓冲区到该缓冲区和类似的东西.没有成功!我想知道这个机制对某人来说是否显而易见......谢谢!

python emacs elisp defadvice advising-functions

5
推荐指数
1
解决办法
1583
查看次数

标签 统计

python ×4

elisp ×2

emacs ×2

ggplot2 ×2

r ×2

advising-functions ×1

bash ×1

defadvice ×1

emacs23 ×1

ggally ×1

git ×1

import ×1

lisp ×1

macos ×1

numpy ×1

pdb ×1

sqlite ×1