我正在为Emacs开发一个软件项目,它有一些可以批处理模式运行的测试,用于快速回归测试.但是,当测试失败时,终端中的堆栈跟踪会在顶部被切断,因此我必须在交互式Emacs会话中再次运行失败测试,以查看完整堆栈恍惚状态并找出错误实际发生的位置.是否有一些我可以修改的变量将扩展Emacs以批处理模式打印到终端的堆栈跟踪的最大长度?
如果你想要一个简单的测试用例来产生一个非常深的堆栈跟踪,这将是一个无限递归的简单案例,当emacs到达某个深度时它会中止:
emacs -Q -batch --eval '(defun f () (f))' -f toggle-debug-on-error -f f
Run Code Online (Sandbox Code Playgroud)
以下是我的系统上该命令的确切输出:
Debug on Error enabled globally
...
f()
f()
f()
f()
f()
f()
f()
f()
f()
f()
f()
f()
f()
f()
f()
f()
f()
f()
f()
f()
f()
f()
f()
f()
f()
f()
f()
f()
f()
f()
f()
f()
f()
f()
f()
f()
f()
command-line-1(("--eval" "(defun f () (f))" "-f" "toggle-debug-on-error" "-f" "f"))
command-line()
normal-top-level()
Run Code Online (Sandbox Code Playgroud)
特别要注意的是,后面的行Debug on Error enabled globally实际上是输出中的省略号,如果不以交互方式运行,就无法更深入地进入堆栈跟踪.
假设我有一个独特元素的R向量,如x <- c(1,2,3,4,5).
有没有函数给我一个这个向量的所有可能分区的列表x?我猜每个分区都是一个向量列表,其中每个元素都x属于一个向量.我想将所有可能的分区分成任意大小的任意数量的集合.
(我认为这样的分区的数量是这样的2^n * n!,其中n是唯一元素的数量.我可能不会在具有4个以上唯一元素的向量上使用此函数.)
我正在生成一大堆具有不同级别的因素,并且我希望能够检测到其中两个何时定义了相同的分区。例如,我要检测以下各项是否相等:
x1 <- factor(c("a", "a", "b", "b", "c", "c", "a", "a"))
x2 <- factor(c("c", "c", "b", "b", "a", "a", "c", "c"))
x3 <- factor(c("x", "x", "y", "y", "z", "z", "x", "x"))
x4 <- factor(c("a", "a", "b", "b", "c", "c", "a", "a"), levels=c("b", "c", "a"))
Run Code Online (Sandbox Code Playgroud)
做这个的最好方式是什么?
我正在寻找一个R函数,match它只用于正则表达式匹配而不是相等.换句话说,如果我有一个变量r是正则表达式的字符向量和变量x是一个字符向量,我希望函数返回一个数字向量,其长度与r给出的每个正则表达式相同匹配该正则表达式的第一个元素.请注意,我不希望正则表达式匹配的字符串中的位置.我想要匹配每个正则表达式的元素的索引.
有时我想以批处理模式运行emacs,在这种情况下我想避免在我的init中做某些事情,比如启动emacs服务器.有没有办法在Emacs Lisp中测试Emacs是否以批处理模式运行?
在R中,我正在尝试使用大型矩阵(39,146,166行乘127列),并且我遇到了许多操作的内存问题.我已经确定矩阵中大约35%的条目是非零的,其余的都是零.这是否足够稀疏,我会使用R的稀疏矩阵类之一来保存表示此矩阵的内存?确定矩阵值得稀疏表示的时候,有什么好的经验法则?
我有一个数字矩阵,我需要提取具有最大可能总和的元素集,但受到任何 2 个元素不能来自同一行或同一列的约束。是否有任何有效的算法,以及 R 是否有该算法的实现?
例如,如果矩阵是(使用 R 的矩阵表示法):
[,1] [,2] [,3]
[1,] 7 1 9
[2,] 8 4 2
[3,] 3 6 5
Run Code Online (Sandbox Code Playgroud)
那么唯一的解是[1,3], [2,1], [3,2],它提取数字 9、8 和 6,总共 23。但是,如果矩阵是:
[,1] [,2] [,3]
[1,] 6 2 1
[2,] 4 9 5
[3,] 8 7 3
Run Code Online (Sandbox Code Playgroud)
那么有 3 个同样好的解:1,8,9;3,6,9; 和5、6、7。这些加起来就是 18。
补充笔记:
如果有人好奇,矩阵的行代表要标记的项目,列代表标签,每个矩阵元素代表为项目分配标签的“一致性分数”。我想以最大化总体一致性的方式将每个标签恰好分配给一个项目。
我喜欢使用漂亮的perl功能,从空角运算符读取会<>神奇地为程序提供UNIX过滤器语义,但我希望能够通过实际的文件句柄(或IO :: Handle对象或类似对象)访问此功能.,这样我就可以做一些事情,比如将它传递给子程序等.有没有办法做到这一点?
这个问题特别难以谷歌,因为搜索"角度操作符"和"文件句柄"只是告诉我如何使用角度操作符从文件句柄中读取.
在perl中,我经常需要运行子进程,向它发送一些输入,然后读取它的输出.有许多模块可以执行此操作,但它们似乎都要求您传入预先存在的变量,然后由函数修改以包含文件句柄.以下是IPC :: Open3概要中的一个示例:
my ($wtr, $rdr, $err);
use Symbol 'gensym'; $err = gensym;
$pid = open3($wtr, $rdr, $err,
'some cmd and args', 'optarg', ...);
Run Code Online (Sandbox Code Playgroud)
当我不得不一遍又一遍地做这种模式时,这种模式会变得有点烦人,特别是因为它涉及一堆我需要记住或查找的位置参数.是否有任何模块提供一个功能(让我们称之为myopen3),如下所示?
my ($wtr, $rdr, $err) = myopen3('some cmd and args', 'optarg', ...);
Run Code Online (Sandbox Code Playgroud)
或者它可以返回相关句柄的哈希或hashref:
my $process = myopen3('some cmd and args', 'optarg', ...);
$process->{STDIN}->print("Some input");
my $output = $process->{STDOUT}->readline;
Run Code Online (Sandbox Code Playgroud)
这样的功能的优点是,myopen3被称为以完全相同的方式内置的system(尽管不希望一些怪癖)避免,并且在返回散列或hashref,位置参数的情况下,和返回值.(另外,如果模块作者后来决定也返回pid和有关进程的其他信息,那么可以在保持向后兼容性的同时完成.)
我实际上自己实现了这个(使用简单的OO接口),但如果CPAN模块存在同样的事情,我宁愿不依赖我自己的自定义模块.
我到目前为止发现的最接近是IPC :: RunSession ::简单,它与返回的对象reader和writer方法.但是,该reader方法合并子进程的STDOUT和STDERR,而我希望选择将它们分开.
假设我有两个相关的类MyClass :: A和MyClass :: B,它们都是MyClass的子类.我希望MyClass的构造函数获取文件名,读取文件,并根据文件的内容,确定文件是A还是B类型.然后,它应该构造一个相应子类的对象并返回它.编辑:实际上,它应该调用相应子类的构造函数并返回结果.
例如,在此代码之后,
my $filename = "file_of_type_A.txt";
my $object = MyClass->new($filename);
Run Code Online (Sandbox Code Playgroud)
$object应该是MyClass :: A的一个实例.这似乎是有效的行为,因为它$object->isa('MyClass')总是会返回true.我正在考虑使用内省来获取MyClass的所有子类的列表,然后尝试依次构造每个子类,直到成功.但是,我没有看到修改Moose构造函数来实现此目的的方法.BUILDARGS和BUILD钩子似乎都不合适.
那么如何修改Moose类的构造函数来选择合适的子类并将构造委托给该子类?
r ×5
perl ×3
emacs ×2
filehandle ×2
matrix ×2
algorithm ×1
coding-style ×1
constructor ×1
equivalence ×1
inputstream ×1
match ×1
memory ×1
moose ×1
overloading ×1
perl-module ×1
r-factor ×1
regex ×1
stack-trace ×1
subclass ×1
subprocess ×1
vector ×1