自1999年以来,我一直在编程工作和乐趣.我想学习新东西,最近我一直专注于解析,因为我的工作很大一部分是阅读,整合和分析数据.如果开销足够低,我认为我可以用非常简单的特定于域的语言表达大量重复性任务.我对这个问题有几个问题.
在计算机科学中,字图有两种定义.第一个是关联数组,一种容器类型,它将一种类型的值映射到另一种类型的值.一个例子是STL地图.第二个定义来自函数式编程,其中map是一个获取列表和函数的函数,按顺序将函数应用于列表的所有元素,并返回结果列表.
地图的不同定义的起源是什么?我猜测第二个定义可能来自McCarthy LISP的mapcar函数,但我不确定这是否来自另一个有用的.第一个定义对我来说很直观,但我不确定它的来源.
我在R中有一个包含几个数据框的列表.我想迭代数据帧并计算数据帧中值的最小值/最大值.这是我现在的代码:
firstname = names(dats)[1]
xlim = c( min( dats[[firstname]][,xlab] ), max( dats[[firstname]][,xlab] ) )
for ( name in names(dats) ) {
xlim = c( min(xlim[1],dats[[name]][,xlab]), max(xlim[2],dats[[name]][,xlab]) )
}
Run Code Online (Sandbox Code Playgroud)
这对我来说似乎很难看,因为它需要很多代码来做一些非常简单的事情.在R中有更典型的方法吗?
我遇到了const成员函数的两个解释
class A{
public:
...
void f() const {}
...
}
Run Code Online (Sandbox Code Playgroud)
我认为第二个是正确的.但为什么第一个出来呢?有什么需要澄清的吗?
谢谢!
我有这种形式的数据:
x y
1 0.19
2 0.26
3 0.40
4 0.58
5 0.59
6 1.24
7 0.68
8 0.60
9 1.12
10 0.80
11 1.20
12 1.17
13 0.39
Run Code Online (Sandbox Code Playgroud)
我正在使用此代码绘制x与y的内核平滑密度估计值:
smoothed = ksmooth( d$resi, d$score, bandwidth = 6 )
plot( smoothed )
Run Code Online (Sandbox Code Playgroud)
我只想要一个x与平滑(y)值的关系图,即## Heading ##
该功能纯粹是为了与S兼容而实现的,尽管它远不如S功能那么慢.其他包中提供了更好的内核平滑器.
什么其他内核平滑器更好,哪些可以找到这些平滑器?
为了使实数值(x)的数据集与一个分布拟合,我们可以使用MASS,如下所示:gamma或Student t分布:
fitdistr(x, "gamma")
Run Code Online (Sandbox Code Playgroud)
要么
fitdistr(x2, "t")
Run Code Online (Sandbox Code Playgroud)
如果我认为我的数据集应该符合gamma和t分布的总和,该怎么办?
P(X) = Gamma(x) + t(x)
Run Code Online (Sandbox Code Playgroud)
我可以使用R中的最大似然拟合来拟合概率分布混合的参数吗?
我有两组范围,由[start,stop]值表示.一些范围重叠,这意味着一个范围的开始位于另一个范围的[开始,停止]之间.我想制作一组没有这种重叠的新范围,并且不包括范围内的任何新值.
范围看起来像这样:
@starts @ends
5 108
5 187
44 187
44 229
44 236
64 236
104 236
580 644
632 770
Run Code Online (Sandbox Code Playgroud)
我期望的输出是这样的:
@starts @ends
5 236
580 770
Run Code Online (Sandbox Code Playgroud)
这是因为前七个范围与5 => 236的间隔重叠,后两个与632 => 770的间隔重叠.
这是我试过的代码:
$fix = 0;
foreach (@ends) {
if ($starts[$fix + 1] < $ends[$fix]) {
splice(@ends, $fix, $fix);
splice(@starts, $fix + 1, $fix + 1);
} else {
$fix += 1;
}
}
Run Code Online (Sandbox Code Playgroud)
我可以自己打印出这些值,我只需要帮助合并算法.
我在Perl中有一个程序可以处理偶尔会非常小的概率.由于舍入误差,有时其中一个概率为零.我想检查以下内容:
use constant TINY_FLOAT => 1e-200;
my $prob = calculate_prob();
if ( $prob == 0 ) {
$prob = TINY_FLOAT;
}
Run Code Online (Sandbox Code Playgroud)
这工作正常,但我实际上看到Perl生成的数字小于1e-200(我刚看到8.14e-314飞过).对于我的应用程序,我可以更改calculate_prob(),以便它返回TINY_FLOAT的最大值和实际概率,但这让我对如何在Perl中处理浮点数感到好奇.
Perl中最小的正浮点值是多少?它是平台依赖的吗?如果有,是否有一个快速程序,我可以用来在我的机器上找出它?
我正在使用Test :: More在Perl中编写单元测试.我已经习惯了cxxunit的一些构造,特别是我缺少TS_ASSERT_DELTA.对于那些没有看过TS_ASSERT_DELTA的人,它看起来像这样:
TS_ASSERT_DELTA( 1.0, 1.1, 0.5 ); // this test will pass
TS_ASSERT_DELTA( 1.0, 1.1, 1e-10 ); // this test will fail
Run Code Online (Sandbox Code Playgroud)
是否有Perl等效的浮点比较?或者每个人都为此写了一个明显的功能?我正在使用这个:
sub compare_float_delta {
my $n1 = shift;
my $n2 = shift;
my $delta = shift;
return( abs($n1-$n2) < $delta );
}
Run Code Online (Sandbox Code Playgroud)
对我来说,这似乎是测试框架应该提供的东西.这个想法是正确的,还是我应该调用float_compare_delta继续我的生活?
perl ×3
r ×3
algorithm ×2
statistics ×2
arrays ×1
c++ ×1
coding-style ×1
const ×1
dataframe ×1
dictionary ×1
distribution ×1
dsl ×1
history ×1
intervals ×1
math ×1
merge ×1
numerical ×1
parsing ×1
search ×1
terminology ×1
testing ×1
unit-testing ×1