R for循环与配对变量

时间:2017-06-24 19:38:27

标签: r loops t-test

我是编程新手(即循环和if-else语句),但不是R中的统计新手。

我想在5个不同人群中比较男性和女性之间的16个特征,因此进行5x16比较。我首先要检查男性和女性特征差异是否相等(var.test)然后使用此信息来确定t.test函数的正确版本(var = T或var = F)。我正在尝试编写一个循环来自动执行此过程。

我写了一个有效的if-else语句:

 if ((var.test(male$mass,female$mass)$p.value < 0.05) == "TRUE") {
   t.test(male$mass,female$mass, var = F)
 } else 
   t.test(male$mass,female$mass, var = T)

但我似乎无法弄清楚如何将其应用于我的所有特质。

我不想使用两个嵌套的for语句:

 for (i in c(male$trait1, male$trait2,...)) {
 for (j in c(female$trait1, female$trait2,...)) {
  ...
   }
 }

因为这将创建一个矩阵,对所有特征组合执行var.test和t.test。然而,我希望每个特征的男性和女性版本只配对。

以下是我的数据格式。我制作了两个数据子集(男性和女性):

head(male)
id location  gens log.gens   sex   mass   head   cbl
49   Hawaii   268 2.428135     M 583.86 78.648 65.54           
27   Hawaii   268 2.428135     M 692.30 83.604 69.67
33   Hawaii   268 2.428135     M 647.70 81.180 67.65
34   Hawaii   268 2.428135     M 704.70 84.720 70.60
35   Hawaii   268 2.428135     M 604.90 82.440 68.70

3 个答案:

答案 0 :(得分:1)

我不确定您希望获得的格式。

这样的东西会返回一个列表

public function initProcess()
{
    parent::initProcess();
    if (Tools::getIsset('mail' . $this->table) {
        $this->action = 'mail';
    }
}

第二次修复

---
- hosts: mail
  become: yes
  become_method: sudo


  tasks:

   - name: Generate CSR
     become_user: zimbra
     command: /opt/zimbra/bin/zmcertmgr createcsr comm -new -keysize 4096 -digest sha512 -subject "/C="{{cert_c}}"/ST="{{cert_st}}"/L="{{cert_l}}"/O="{{cert_o}}"/OU="{{cert_ou}}"/CN="{{cert_cn}}"" "{{cert_alt}}"

答案 1 :(得分:1)

对不起,如果误解了你的问题,听起来就像你只是试图在你的第一个if-else语句中应用一个循环,所以它会循环遍历所有的特征,因为它确实很大?要在循环中引用列名称,您需要使用常规表示法引用列:data["numeric row","numeric column"]而不是data$"column name"

#cycles through a vector comprised of 1 through the number of columns of the data (assuming the number of traits for each sex is equal). 
for(i in 1:length(male)){

#your if-else, refering to columns with row/column notation. 
 if ((var.test(male[,i],female[,i])$p.value < 0.05) == "TRUE") {
   t.test(male[,i],female[,i], var = F)
 } else {
   t.test(male[,i],female[,i], var = T)
}

这将if-else应用于所有特征。请注意,这不会存储t.test函数的结果。

答案 2 :(得分:0)

使用该函数并使用purrr:map()purrr:map2(),它将通过函数迭代每个值。