Я пытаюсь использовать цикл for
и оператор if
в моем коде R
, как показано ниже.
Он создает график плотности, а затем я пытаюсь добавитьвертикальная линия к плотности, которая окрашена по видам.
Когда я print(organism)
в цикле for
печатает столбец видов 4 раза, почему он не распечатывает его один раз?Так почему же он циклически повторяет мои данные 4 раза?
Коду удается добавить некоторые красные линии на график плотности, но почему он не добавляет оставшиеся цветные линии для других видов?
dat <- structure(list(pdb = structure(1:13, .Label = c("1akk.pdb", "1fi7.pdb",
"1fi9.pdb", "1giw.pdb", "1hrc.pdb", "1i5t.pdb", "1j3s0.10.pdb",
"1j3s0.11.pdb", "1j3s0.12.pdb", "1j3s0.13.pdb", "1j3s0.14.pdb",
"2aiu.pdb", "2b4z.pdb"), class = "factor"), PA = c(1128, 1143,
1119, 1130, 1055, 1112, 1120, 1121, 1135, 1102, 1121, 1037, 1179
), EHSS = c(1424, 1439, 1404, 1423, 1318, 1403, 1412, 1415, 1432,
1391, 1413, 1299, 1441), Species = structure(c(2L, 2L, 2L, 2L,
2L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 1L), .Label = c("BOSTAURUS",
"EQUUSCABALLUS", "HOMOSAPIENS", "MUSMUSCULUS"), class = "factor")), .Names = c("pdb",
"PA", "EHSS", "Species"), class = "data.frame", row.names = c(NA,
-13L))
den.PA <- density(dat$PA)
plot(den.PA)
for (i in 1:length(dat)){
lineat = dat$PA[i]
organism = dat$Species[i]
lineheight <- den.PA$y[which.min(abs(den.PA$x - lineat))]
print (organism)
if (organism == 'EQUUSCABALLUS'){
col = 'red'
}
if (organism == 'HOMOSAPIENS'){
col = 'blue'
}
if (organism == 'MUSMUSCULUS'){
col = 'green'
}
if (organism == 'BOSTAURUS'){
col = 'purple'
}
lines(c(lineat, lineat), c(0, lineheight), col = col)
}