将结果从for循环写入列

时间:2013-12-09 20:09:28

标签: r

我正在使用R来尝试将for循环的结果写入我在数据框中创建的列。我的附加列是我的数据框架基因型中的hetCSF,我正在尝试为其分配默认值0.for循环应比较1036行中每个数据帧的2列,如果两个数据条目则返回值1是相同的,如果不是,则为0。有人可以看一下这段代码并告诉我我做错了什么吗?

Heterozygosity <- function (Genotypes$CSF1PO, Genotypes$CSF1PO.1){
  Genotypes$hetCSF <- 0 #gives Genotypes$hetCSF a default value of 0 which corresponds to heterozygous
  for (i in 1:nrow(Genotypes)){ #loops the following across all rows
  Genotypes$hetCSF <- as.numeric(identical(Genotypes[i, "CSF1PO"], Genotypes[i, "CSF1PO.1"])) #decides if the 2 columns have the same value and are therefore homozygous, returns 1 for homozygous in new column homCSF.G
  }
}

目前,当我运行它时,它告诉我我有一个unexpected '$' in "Heterozygosity <- function Genotypes$" and an unexpected '}' in "}"。非常感谢你的帮助。我对R很新,所以如果这是一个非常基本的问题,我道歉。

2 个答案:

答案 0 :(得分:3)

更简单的方法是

Genotypes <- transform(Genotypes, hetCSF = as.integer(CSF1PO == CSF1PO.1))

答案 1 :(得分:1)

另一种做同样事情的方法:

Genotypes$hetSCF <- with(Genotypes, as.integer(CSF1PO == CSF1PO.1))

或者,再多一点:

Genotypes$hetSCF <- as.integer(Genotypes$CSF1PO == Genotypes$CSF1PO.1)

FWIW:由于你是R的新手,其原因在于R是矢量化的,这意味着(几乎)所有东西都被视为一个矢量。所以你几乎不必遍历行。因此,(x==y)将返回T或F值的向量,这取决于x和y中的对应元素是否相等。函数as.integer(...)(在本例中)采用向量参数并返回一个新的向量,其中T转换为1,F转换为0.