從以前的問題,我有大約嘗試檢查父是否是給孩子的基因型正確的父詞幹(見Checking whether a "string" expression in a specified variable is contained in several other variables)如何找到與隱性純合值
現在,我想看看是否如果小孩的基因型是隱性基因型(對這個基因有兩個相同的隱性值[等位基因])。在這種情況下,孩子總是受這種疾病的影響,而父母則不患病(孩子是先證者)。我試圖弄清楚父母和孩子是否是純合子,並且確定孩子是否與父母的基因型相匹配......但是從這兩條信息我似乎無法確定孩子是否是隱性純合子...
這裏是我迄今爲止(按照similar answer從上面):
homo <- read.table("/.../Family1a/Family1a_vcf.txt", sep="\t", header=T)
d <- data.frame(list(mom = homo[c(1)],
dad = homo[c(2)],
child = homo[c(3)]
), stringsAsFactors = FALSE)
check_homo <- function(x) {
#homo
m1 <- sapply(strsplit(as.character(d[,2]),"/"),function(x) x[1])
m2 <- sapply(strsplit(as.character(d[,2]),"/"),function(x) x[2])
d1 <- sapply(strsplit(as.character(d[,1]),"/"),function(x) x[1])
d2 <- sapply(strsplit(as.character(d[,1]),"/"),function(x) x[2])
c1 <- sapply(strsplit(as.character(d[,3]),"/"),function(x) x[1])
c2 <- sapply(strsplit(as.character(d[,3]),"/"),function(x) x[2])
mom_homo <- m1 == m2
dad_homo <- d1 == d2
child_homo <- c1 == c2
homo_matrix_d <- matrix(c(dad_homo,child_homo), ncol=2, byrow=TRUE)
homo_matrix_m <- matrix(c(mom_homo,child_homo), ncol=2, byrow=TRUE)
homo_match_dc <- rowSums(homo_matrix_d)
homo_match_mc <- rowSums(homo_matrix_m)
#which ones equal parents
fam <- strsplit(as.character(d[c(1, 2, 3)]), "/")
names(fam) <- c("mom", "dad", "child")
mom_query <- fam[["child"]] == fam[["mom"]]
dad_query <- fam[["child"]] == fam[["dad"]]
fam_matrix <- matrix(c(mom=mom_query, dad=dad_query), nrow=2)
child_match_parents <- rowSums(fam_matrix)
#if child doesn't match parents and child_homo = recessive
#if child does equal parents,if homo_parent and homo_child then child = dominant
child_rec <- ifelse((child_match_parents < 1 & child_homo == "TRUE"), "RECESSIVE", "OTHER")
child_dom <- ifelse((child_match_parents != 0 & child_homo == "TRUE") & (mom_homo == "TRUE" | dad_homo == "TRUE"), "DOMINANT", "OTHER")
}
child_recessive_tmp <- data.frame(apply(x, 1, check_homo))
它是不能工作循環中的最後兩行。這整個事情可能是錯的,所以我不介意沮喪的迴應。總之,我想要一個變量來說明孩子的基因型是否是純合隱性的。
編輯:
數據示例:每行有一個SNP。
Mom Dad Child
rs1 A/A G/G A/G
rs2 T/C T/C T/T
rs3 A/A C/A A/A
.
.
.
rs100 G/C A/G C/A
您可以添加一些示例數據嗎? – dayne
這不會解決你的問題,但你不需要引用'TRUE'和'FALSE'。事實上,根本不需要'== TRUE','&child_homo'等同於'&child_homo == TRUE'(只要'child_homo'是一個布爾值)。 – Gregor