小编use*_*889的帖子

Perl:如何测试是否已将任何值(甚至为零)分配给散列键

是否有正确的测试方法,如果已经为特定的哈希键分配了任何值,即使该值为零?我一直在处理这样的声明:

%hash=();
$hash{a}=1;
$hash{b}=0;
if($hash{$key}) { do something }
Run Code Online (Sandbox Code Playgroud)

但是,对于已被触摸的键和已赋值为0的键(例如,$ hash {b}和$ hash {c}都计算为'false'),这会产生相同的结果.有没有办法说出这两者之间的区别?

perl hash

3
推荐指数
2
解决办法
5371
查看次数

配对t检验崩溃apply-loop(已编辑)

为了回应有用的评论,我编辑了原始问题(我假设for循环和apply循环给出了不同的结果).

我使用R来运行大量的2组t检验,使用分隔表中的输入.根据这里和其他地方的建议,我尝试了'for-loops'和'apply'来实现这一目标.对于'正常't.test,两者都很好地工作并给出相同的结果.但是,对于配对t检验,for-look似乎有效,而apply-loop则不然.后来,我发现两个循环都遇到了同样的问题(见下文),但for循环更适合处理情况(循环的一个循环返回无效结果),而apply-loop完全失败.

我的输入文件如下所示:(第一行是标题行,数据行有名称,第1组有4个数据点,第2组有4个数据点):

header g1.1 g1.2 g1.3 g1.4 g2.1 g2.2 g2.3 g2.4
name1  0    0.5  -0.2 -0.2 -0.1 0.4 -0.3 -0.3
name2  23.2 24.4 24.5 27.2 15.5 16.5 17.7 20.0
name3  .....
Run Code Online (Sandbox Code Playgroud)

等等(整体~50000行).第一条数据线(从名字19开始证明是罪魁祸首.

这是for循环版本,效果更好(在有问题的行上失败,但正确处理所有其他行):

table <- read.table('ttest_in.txt',head=1,sep='\t')
for(i in 1:nrow(table)) {
   g1<-as.numeric((table)[i,2:5])
   g2<-as.numeric((table)[i,6:9])
   pv <- t.test(g1,g2,paired=TRUE)$p.value
}
Run Code Online (Sandbox Code Playgroud)

这是导致问题的"应用"版本

table <- read.table('ttest_in.txt',head=1,sep='\t')
pv.list <- apply(table[,2:9],1,function(x){t.test(x[1:4],x[5:8],paired=TRUE)$p.value})
Run Code Online (Sandbox Code Playgroud)

~50000条数据线中的一条是有问题的,因为所有成对比较的差异是相同的,这在配对t检验中导致未定义的p值(基本上为零).应用循环崩溃,错误"数据基本上是常量".对我来说(作为一个R新手),因为t.test不喜欢一个数据而崩溃整个脚本似乎不是一个好主意.在for循环中,此数据行也会导致错误消息,但循环继续,所有其他t测试都会给出正确的结果.

我做了一些根本错误的事吗?这种行为基本上禁止使用apply-loops进行这种批处理分析.或者有一种规避这个问题的标准方法.为什么t检验不会返回对该特定p值无效的东西而不是拯救?

r hypothesis-test

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

标签 统计

hash ×1

hypothesis-test ×1

perl ×1

r ×1