Эта ошибка часто встречается при использовании унарного оператора (например, -
, +
или !
), который неуместен. Это означает, что у вас есть опечатка или объект пуст или не то, что вы думаете. A предположение (поскольку вы не ответили на заниженное предложение @ AllanCameron) заключается в том, что у вас где-то есть переменная с именем title
, предположим, что это numeri c или что-то, что вы можете проиндексировать вектор / список / frame off of, и он либо не является числовым c, либо пуст. Я могу воспроизвести эту точную ошибку с помощью
title <- c()
mtcars[-title,]
# Error in -title : invalid argument to unary operator
title <- "1"
mtcars[-title,]
# Error in -title : invalid argument to unary operator
. Если вам нужна трассировка стека ошибок, вы можете воспользоваться предложением https://renkun.me/2020/03/31/a-simple-way-to-show-stack-trace-on-error-in-r/:
options(error = function() {
sink(stderr())
on.exit(sink(NULL))
traceback(3, max.lines = 1L)
if (!interactive()) {
q(status = 1)
}
})
mtcars[-title,]
# Error in -title : invalid argument to unary operator
# 2: `[.data.frame`(mtcars, -title, )
# 1: mtcars[-title, ]
В этом случае он говорит вам немного больше. Если он находится в функции, эта трассировка стека дает вам номер строки.
myfunc <- function(title) {
1+1 # doing something
2*2 # doing something else
3^3 # yawn
mtcars[-title,]
}
myfunc(1:30)
# mpg cyl disp hp drat wt qsec vs am gear carb
# Maserati Bora 15.0 8 301 335 3.54 3.57 14.6 0 1 5 8
# Volvo 142E 21.4 4 121 109 4.11 2.78 18.6 1 1 4 2
myfunc(c())
# Error in -title : invalid argument to unary operator
# 3: `[.data.frame`(mtcars, -title, ) at #5
# 2: mtcars[-title, ] at #5
# 1: myfunc(c())
(я знаю, что title
здесь неправильно назван, просто лишнее доказательство.)
(Просто чтобы подтвердить еще раз: я продемонстрировал на data.frame
, но это также работает с векторами / списками: (1:10)[-title]
)
Кроме того, увидев ваш «скрипт»: это не скрипт. Это документ. Если я прав, вы называете это как-то вроде Rscript /path/to/file.Rmd
. В этом случае R думает, что это файл сценария R, а не файл R-markdown.
Давайте попробуем это на консоли. Скопируйте следующее (новую строку и все остальное) и вставьте в консоль R:
---
title: "EXAMPLECODE"
Когда вы увидите «унарную» ошибку, вы поймете, что R интерпретирует это как команду . В буквальном смысле R видит это как: «отрицать отрицать отрицать (новая строка / пробелы игнорируются) символ (заголовок) последовательность-двоеточие строка (EXAMPLECODE)». (In) Удобно, что title
также является базовой функцией в R, поэтому она существует; если бы вместо этого было
---
mytitle: "EXAMPLECODE"
(что не является допустимым Rmd), тогда ваша ошибка была бы вместо
Error: object 'mytitle' not found
, что было бы немного более ясным / информативным.
Так что в конечном итоге я не знаю наверняка, но предполагаю, что вы непреднамеренно говорите R, чтобы он попытался интерпретировать все это как сценарий R, а это не . Возможно, вместо него будет работать Rscript knitr::knit("/path/to/file.Rmd")
или аналогичный.