Ошибка в -title: недопустимый аргумент унарного оператора Выполнение остановлено - PullRequest
0 голосов
/ 06 мая 2020

Я использовал CronJobs, чтобы запланировать выполнение моей уценки R каждый день в 18:00. Однако он не запустил скрипт и дал мне следующую ошибку: Ошибка в -title: недопустимый аргумент унарного оператора Выполнение остановлено.

В качестве рабочего каталога задано мое исходное местоположение.

Есть совет? Спасибо!

Вот мой код:

---
title: "EXAMPLECODE"
author: "XXXX"
date: "5/4/2020"
output: pdf_document
---

#STEP 1: INSTALL AND LOAD RCURL PACKAGE

```{r}
install.packages("RCurl")
library(RCurl)
```

#STEP 2: READ IN CSV FILE FOR EXAMPLE

```{r}
Example<- getURL("https://www.EXAMPLEURLHERE.csv")
ExampleData <- read.csv(text = Example)
ExampleData
```

#STEP 3: SAVE DATA INTO CSV FILE

```{r}
write.table(ExampleData, file="ExampleData_Update.csv", sep=",")
```

1 Ответ

2 голосов
/ 06 мая 2020

Эта ошибка часто встречается при использовании унарного оператора (например, -, + или !), который неуместен. Это означает, что у вас есть опечатка или объект пуст или не то, что вы думаете. 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") или аналогичный.

...