我使用 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)
当一元运算符(例如-,+、 或!)不合适时,此错误很常见。这表明您有拼写错误或对象为空或与您的想法不符。一个猜测(因为你还没有回应@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")或类似的方法会起作用。