Рассмотрим следующий фрагмент кода (комментарии в конце указывают на номера строк и являются не частью проблемы):
set.seed(1) # 1
my_dat1 <- data.frame(x = runif(100, 1, 10), # 2
w = runif(100, 1, 10)) # 3
# 4
my_dat1$y_orig <- my_dat1$x * my_dat1$w # 5
my_dat1$y_obs <- my_dat1$y_orig + rnorm(100) # 6
# 7
my_stat <- function(data, orig_mod) { # 8
new_mod <- update(orig_mod, data = data) # 9
r <- residuals(new_mod) #10
f <- fitted(new_mod) #11
l <- lowess(f, r) #12
res <- c(l$x, l$y) #13
res #14
} #15
Когда я lint
этот файл через lintr:::addin_lint()
Я получаю следующую странную ошибку:
$ test.R:List of 8
..$ filename : chr "test.R
..$ line_number : int 6
..$ column_number: int 14
..$ type : chr "warning"
..$ message : chr "no visible binding for global variable ‘x’"
..$ line : chr " res <- c(l$x, l$y) #13"
..$ ranges :List of 1
.. ..$ : int [1:2] 14 14
..$ linter : chr "object_usage_linter"
..- attr(*, "class")= chr "lint"
$ test.R:List of 8
..$ filename : chr "test.R"
..$ line_number : int 6
..$ column_number: int 19
..$ type : chr "warning"
..$ message : chr "no visible binding for global variable ‘y’"
..$ line : chr " res <- c(l$x, l$y) #13"
..$ ranges :List of 1
.. ..$ : int [1:2] 19 19
..$ linter : chr "object_usage_linter"
..- attr(*, "class")= chr "lint"
- attr(*, "class")= chr "lints"
Однако, если я удаляю строки #5
и #6
, у меня больше нет ошибки :
set.seed(1) # 1
my_dat1 <- data.frame(x = runif(100, 1, 10), # 2
w = runif(100, 1, 10)) # 3
# 4
# 7
my_stat <- function(data, orig_mod) { # 8
new_mod <- update(orig_mod, data = data) # 9
r <- residuals(new_mod) #10
f <- fitted(new_mod) #11
l <- lowess(f, r) #12
res <- c(l$x, l$y) #13
res #14
} #15
Ошибка нет при линтовке этого файла.
Вопросы
- Это преднамеренное поведение или ошибка в
lintr
? - Почему номер строки неверен, учитывая, что
lintr
жалуется на фрагмент в номере строки #13
, а не в номере строки #6
?