我正在使用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很新,所以如果这是一个非常基本的问题,我道歉。
答案 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.