У меня есть следующие фрагменты кода, где я хочу заменить числа (1,2,3,4) буквами (A, T, G, C) в векторе длины 20. Я намеренно хочу использовать для -loop, if-Statement и sub () , так как это является частью упражнения для демонстрации эффективности кода (in) по отношению к gsub () и which () .
rand1M = round(runif(n = 20,min = 1,max = 4))
it = 1
for(i in rand1M) {
if(i == 1) {
rand1M[it] = sub(pattern = "1", replacement = "A", x = i)
}
if(i == 2) {
rand1M[it] = sub(pattern = "2", replacement = "T", x = i)
}
if(i == 3) {
rand1M[it] = sub(pattern = "3", replacement = "G", x = i)
}
if(i == 4) {
rand1M[it] = sub(pattern = "4", replacement = "C", x = i)
}
it = it + 1
}
Этот код выполняет все, что ему требуется, и в результате выполняются полные замены чисел в векторе.
После этого я попытался удалить операторы if, поскольку они кажутся немного излишними, учитывая, что sub () уже проверяет условие. И так:
rand1M = round(runif(n = 20,min = 1,max = 4))
it = 1
for(i in rand1M) {
rand1M[it] = sub(pattern = "1", replacement = "A", x = i)
rand1M[it] = sub(pattern = "2", replacement = "T", x = i)
rand1M[it] = sub(pattern = "3", replacement = "G", x = i)
rand1M[it] = sub(pattern = "4", replacement = "C", x = i)
it = it + 1
}
В результате получается, что работает только самый последний sub () , поэтому в векторе заменяются только буквы C. Почему это происходит?
Замена "x = i" на "x = rand1M [it]", кажется, помогает, но я не могу понять, почему.
rand1M = round(runif(n = 20,min = 1,max = 4))
it = 1
for(i in rand1M) {
rand1M[it] = sub(pattern = "1", replacement = "A", x = rand1M[it])
rand1M[it] = sub(pattern = "2", replacement = "T", x = rand1M[it])
rand1M[it] = sub(pattern = "3", replacement = "G", x = rand1M[it])
rand1M[it] = sub(pattern = "4", replacement = "C", x = rand1M[it])
it = it + 1
}
Заранее спасибо за ввод!