Проблема не столько в компьютере, сколько в пользователе. В общем, код может стать намного сложнее для отладки. Опечатки сделаны очень легко, поэтому если вы делаете:
c <- c("Some text", "Second", "Third")
c[3]
c(3)
Вы получите правильные результаты. Но если вы пропустите что-то в коде и наберете c(3)
вместо c[3]
, найти ошибку будет не так просто.
Определение области может также привести к очень запутанным сообщениям об ошибках. Возьмите следующую некорректную функцию:
my.foo <- function(x){
if(x) c <- 1
c + 1
}
> my.foo(TRUE)
[1] 2
> my.foo(FALSE)
Error in c + 1 : non-numeric argument to binary operator
С более сложными функциями это может привести вас к пути отладки, ведущему в никуда. Если вы замените c
на x
в вышеупомянутой функции, ошибка будет выглядеть как «object 'x' not found
». Это приведет к вашей ошибке кодирования намного быстрее.
Кроме того, это может привести к довольно запутанному коду. Код типа c(c+c(a,b,c))
запрашивает у мозга больше, чем c(d+c(a,b,d))
. Опять же, это тривиальный пример, но он может иметь значение.
И, очевидно, вы тоже можете получать ошибки. Когда вы ожидаете функцию, вы не получите ее, что может привести к другому набору раздражающих ошибок:
my.foo <- function(x,fun) fun(x)
my.foo(1,sum)
[1] 1
my.foo(1,c)
Error in my.foo(1, c) : could not find function "fun"
Более реалистичный (и реальный) пример того, как это может вызвать проблемы:
x <- c(1:10,NA)
y <- c(NA,1:10)
lm(x~y,na.action=na.omit)
# ... correct output ...
na.omit <- TRUE
lm(x~y,na.action=na.omit)
Error in model.frame.default(formula = x ~ y, na.action = na.omit,
drop.unused.levels = TRUE) : attempt to apply non-function
Попробуйте выяснить, что здесь не так, если na.omit <- TRUE
произойдет на 50 строк в вашем коде ...
Ответ отредактирован после комментария @Andrie для включения примера запутанных сообщений об ошибках