Hy,
, чтобы улучшить приведенную выше форму кода. Я бы посоветовал вам принять сначала оператор if, который произойдет чаще всего.Это немного ускорит код, потому что в большинстве случаев область if else не проверяется до конца.Я провел очень маленький тест по этому вопросу:
df <- data.frame(check = sample(c(0,1),size = 10000, replace = T, prob = c(0.1,0.9)),
solution = rep(NA, 10000))
start_t <- Sys.time()
for (idx in seq_len(nrow(df))) {
if(df[idx, "check"]==0) {
df[idx, "solution"] <- "zero"
} else if (df[idx, "check"]==1) {
df[idx, "solution"] <- "one"
}
}
print(Sys.time()-start_t)
Этот код необходим в моей системе Time difference of 0.7524531 secs
.Вы можете видеть, что в кадре данных будет больше единиц, чем нулей.Следовательно, я переключу проверяющие операторы и установлю «if check == 1» в начале.
df <- data.frame(check = sample(c(0,1),size = 10000, replace = T, prob = c(0.1,0.9)),
solution = rep(NA, 10000))
start_t <- Sys.time()
for (idx in seq_len(nrow(df))) {
if(df[idx, "check"]==1) {
df[idx, "solution"] <- "one"
} else if (df[idx, "check"]==0) {
df[idx, "solution"] <- "zero"
}
}
print(Sys.time()-start_t)
Для этого кода требуется только Time difference of 0.6977119 secs
.Это на ~ 8% быстрее и выполняет ту же работу, что и приведенный выше пример.Надеюсь, вы поняли мою точку зрения и удачи с вашим кодом.