data.table如果变量名存储在字符向量中,如何引用变量?例如,这适用于data.frame:
df <- data.frame(col1 = 1:3)
colname <- "col1"
df[colname] <- 4:6
df
# col1
# 1 4
# 2 5
# 3 6
Run Code Online (Sandbox Code Playgroud)
如何使用或不使用:=表示法对data.table执行相同的操作?显而易见的事情是dt[ , list(colname)]行不通的(我也没想到).
我理解tapply()在R中做了什么.但是,我无法从文档中解析它的描述:
Apply a Function Over a "Ragged" Array
Description:
Apply a function to each cell of a ragged array, that is to each
(non-empty) group of values given by a unique combination of the
levels of certain factors.
Usage:
tapply(X, INDEX, FUN = NULL, ..., simplify = TRUE)
当我想到tapply时,我想到了sql中的group by.您可以通过INDEX中的并行因子级别将X中的值组合在一起,并将FUN应用于这些组.我已经阅读了100次tapply的描述,仍然无法弄清楚它所说的如何映射到我如何理解tapply.也许有人可以帮我解析一下吗?
考虑这个简单的例子(以红色显示):
echo -e "\033[31mHello World\033[0m"
它在终端上以红色正确显示.现在考虑:
watch echo -e "\033[31mHello World\033[0m"
它不显示颜色.
注意:我知道通过清除和重新运行来编写一个模仿基本行为的循环很容易.但是,清除操作会导致屏幕闪烁,这在手表下不会发生
编辑:最初这个问题指定了转义序列而不是vt100序列,但这不是我所追求的,并且用单引号解决了.
请考虑以下代码段:
#include <iostream>
using namespace std;
int a[10][2];
int b[10][2];
int main(){
//intended
cout << a[0][0] - b[0][0] << endl;
//left out dimension by mistake
cout << a[0] - b[0] << endl;
}
Run Code Online (Sandbox Code Playgroud)
显然(或者可能不是每个注释)第二种情况是C和C++中的有效指针算法,但在我使用它的代码库中通常是语义错误; 通常在嵌套的for循环中省略了维度.有没有-W标志或静态分析工具可以检测到这个?
我试图在一个脚本中使用R作为一个简单的命令行绘图工具.即用户管道在csv文件中,他们得到一个情节.我可以得到R罚款并通过各种临时文件阴谋来显示情节,但我遇到了障碍.在用户关闭窗口之前,我无法弄清楚如何让R继续运行.
如果我绘制并退出,则绘图立即消失.如果我绘制并使用某种无限循环,用户就无法关闭该图; 他必须使用我不喜欢的中断退出.我看到有一个getGraphicsEvent函数,但它声称不支持该设备(X11).无论如何,它似乎实际上不支持onClose事件,只有onMouseDown.
关于如何解决这个问题的任何想法?
编辑:感谢Dirk提供了查看tk界面的建议.这是我的测试代码:
require(tcltk)
library(tkrplot)
## function to display plot, called by tkrplot and embedded in a window
plotIt<-function(){ plot(x=1:10, y=1:10) }
## create top level window
tt<-tktoplevel()
## variable to wait on like a condition variable, to be set by event handler
done <- tclVar(0)
## bind to the window destroy event, set done variable when destroyed
tkbind(tt,"<Destroy>",function() tclvalue(done) <- 1)
## Have tkrplot embed the plot window, then realize it with tkgrid
tkgrid(tkrplot(tt,plotIt))
## wait until …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Spreadsheet :: SimpleExcel生成一个xls文件,该文件调用在第三方添加中定义的函数(Bloomberg,如果重要的话).底层的WriteExcel包不允许我写出来,因为它不知道这个加载项函数.我看到模块知道的内置函数的巨型哈希表,可能会将此函数添加到它,但我不知道函数的属性,尤其是'ptg代码'.
有没有办法确定这个第三方函数的ptg代码(我假设这类似于操作码),或者是否有某种方法来欺骗模块让我写出这些函数而不必知道这些细节?还是我没想过的第三个计划?
在下面的代码中,我试图执行一个简单的文件尾操作.假设foo.txt完全为空.我希望第一个can_read()会阻塞,但事实并非如此.can_read也不会在sysreadline()块中调用或者等待.相反,第一个can_read立即将句柄返回到foo.txt,而sysreadline中的第一个can_read也是如此.然后sysread什么也不返回,因为没有什么可读的,这导致在sysreadline内部忙等待.怎么会这样?我知道选择可以由于信号或关闭文件句柄而提前结束,但我在这里看不到任何机会.实际上,当foo.txt中出现文本(带换行符)时,会打印出来.我不明白为什么代码不会无限制地阻塞,因为当没有任何东西可读时,第一个can_read.除了浪费cpu之外,它还不可能同时拖尾多个文件,因为你总是会在第一次忙碌的等待中陷入困境.我觉得我必须在这里忽略一些简单的事情......
这是perl 5.8.8
#!/usr/bin/perl -w
use strict;
use IO::Select;
use IO::Handle;
use Symbol qw(qualify_to_ref);
open my $inf, "<", "foo.txt" or die "hey! Can't open foo.txt!\n";
my $sel = IO::Select->new();
$sel->add($inf);
while(my @ready = $sel->can_read()){
foreach my $handle (@ready){
my $line = sysreadline($handle);
print $line;
}
}
##
## deal with buffering for select. from perl cookbook 7.23
sub sysreadline {
my($handle, $timeout) = @_;
$handle = qualify_to_ref($handle, caller( ));
my $infinitely_patient = (@_ == 1 || $timeout …Run Code Online (Sandbox Code Playgroud) 考虑一个看起来像这样的查询:
my $query=<<QUERY;
select * from foo1 where col < ?
union all
select * from foo2 where col < ?
QUERY
Run Code Online (Sandbox Code Playgroud)
假设实际查询确实需要联合并且不能以另一种方式有效地解决.where子句中的变量将始终相同.有没有什么方法可以构造这个,所以我只需要传递1个参数来执行而不是两次传递相同的参数?
我正在构建一个散列,其中与标量相关联的键不一定是唯一的.期望的行为是,如果键是唯一的,则值是标量.如果密钥不是唯一的,我希望该值是与密钥关联的标量的数组引用.由于哈希是迭代构建的,我不知道密钥是否是提前唯一的.现在,我正在做这样的事情:
if(!defined($hash{$key})){
$hash{$key} = $val;
}
elseif(ref($hash{$key}) ne 'ARRAY'){
my @a;
push(@a, $hash{$key});
push(@, $val);
$hash{$key} = \@a;
}
else{
push(@{$hash{$key}}, $val);
}
Run Code Online (Sandbox Code Playgroud)
有更简单的方法吗?
我正在尝试在selenium ide中构建一个将页面源存储到文件中的宏.我看到有一个命令storeHtmlSource()将页面源存储到变量中,但我无法弄清楚如何将变量的内容存储到文件中.是否有一些直接的方法来做这个或我需要以某种方式让它执行javascript来做到这一点?
如果不是很明显的话,我对硒来说是全新的,但是我已经查看了一段时间的文档并且没有想到它.
考虑下面的包装器函数,如果函数抛出(不确定为什么格式化不稳定),它会在给定次数内重试给定函数:
sub tryit{
my $fun = shift;
my $times = shift;
my @args = @_;
my $ret;
do{
$times--;
eval{
$ret = $fun->(@args);
};
if($@){
print "Error attemping cmd: $@\n";
}
else{
return $ret;
}
}while($times > 0);
return;
}
Run Code Online (Sandbox Code Playgroud)
如何扩展,以便无论返回什么类型的值,都可以正确地调整参数函数的返回值?例如,此函数不会正确传递数组.你不能只返回$ fun - >()因为返回只会让你退出eval块.
如何在R中引用匹配的字符串(或捕获的组)以便附加到sub().例如,我会这样做,以便在比赛中sed附加一个'd'
echo "66xx" | sed 's/[0-9][0-9]/&d/g'
66dxx
Run Code Online (Sandbox Code Playgroud) 我有一个Workbook_Open子做一些东西,然后调用application.quit.但是,现在我已经添加了这个,如果excel在打开后立即关闭,我怎么能编辑例程?