-title 中的错误:一元运算符的参数无效执行已停止

md_*_*_14 3 cron r

我使用 CronJobs 安排 R markdown 每天下午 6 点运行。但是,它没有运行脚本并给出了以下错误:-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=",")
```
Run Code Online (Sandbox Code Playgroud)

r2e*_*ans 7

当一元运算符(例如-+、 或!)不合适时,此错误很常见。这表明您有拼写错误或对象为空或与您的想法不符。一个猜测(因为你还没有回应@AllanCameron的低调建议)是你有一个title在某处命名的变量,假设它是数字或者你可以索引向量/列表/帧的东西,它要么是非数字的或空。我可以重现这个精确的错误

title <- c()
mtcars[-title,]
# Error in -title : invalid argument to unary operator
title <- "1"
mtcars[-title,]
# Error in -title : invalid argument to unary operator
Run Code Online (Sandbox Code Playgroud)

如果您想要错误的堆栈跟踪,那么您可以从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, ]
Run Code Online (Sandbox Code Playgroud)

在这种情况下,它会告诉您更多信息。如果它在函数中,则堆栈跟踪会为您提供行号。

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())
Run Code Online (Sandbox Code Playgroud)

(我知道,title这里命名错误,只是过度证明了这一点。)

(再次断言:我在 a 上进行了演示data.frame,但这也适用于向量/列表(1:10)[-title]:)


此外,在看到您的“脚本”时:它不是脚本。它是一个文件。如果我是对的,那么你会称其为Rscript /path/to/file.Rmd. 在这种情况下,R 认为这是一个 R 脚本文件,而不是 R-markdown 文件。

让我们在控制台上尝试一下。复制以下内容(换行符和所有内容)并将其粘贴到 R 控制台中:

---
title: "EXAMPLECODE"
Run Code Online (Sandbox Code Playgroud)

当您看到“一元”错误时,您会意识到 R 正在将其解释为命令。从字面意义上讲,R 将其视为:“否定否定否定(忽略换行符/空格)符号(标题)序列冒号字符串(EXAMPLECODE)”。(In)方便地,title也是 R 中的基函数,因此存在;如果是的话

---
mytitle: "EXAMPLECODE"
Run Code Online (Sandbox Code Playgroud)

(这不是有效的 Rmd),那么您的错误将改为读取

Error: object 'mytitle' not found
Run Code Online (Sandbox Code Playgroud)

这会稍微更清晰/信息更丰富。

所以最终我不确定,但我的猜测是你无意中告诉 R 尝试将整个事情解释为 R 脚本,但事实并非如此。也许Rscript knitr::knit("/path/to/file.Rmd")或类似的方法会起作用。