我是一个编程新手,我已经被难住了。我正在使用其他人编写的代码,我需要保持功能相同。这是我不断得到的错误信息:"错误:对象'date_Object' not found">
这是我试图运行的代码块,它一直给我这个错误信息:
sightdate_to_Date <- function(sightdate)
date_Object <- mdy(sightdate)
is_wrong <- date_Object > Sys.Date()
date_Object[is_wrong] <- date_Object[is_wrong] - years(100)
date_Object
请帮忙!我不知道为什么它不工作,因为我试图格式化,而不是实际改变任何数据。
您需要在函数声明周围使用大括号。如果没有它们,这就是R所看到的:
sightdate_to_Date <- function(sightdate) {
date_Object <- mdy(sightdate)
} # function declaration/definition is complete
is_wrong <- date_Object > Sys.Date()
date_Object[is_wrong] <- date_Object[is_wrong] - years(100)
date_Object
在这种情况下,应该清楚为什么没有找到date_Object
。如果不是……那么最好研究一下"范围"。的对象;经过一些研究,我发现https://bookdown.org/rdpeng/rprogdatascience/scoping-rules-of-r.html和https://www.geeksforgeeks.org/scope-of-variable-in-r/这两个似乎都很合理。底线是,在函数内部创建/使用的变量在函数外部不可用;函数内部唯一可以在外部使用的东西是返回的对象,或者使用显式的return(.)
函数(通常不需要),或者使用函数中计算的最后一个表达式。如果您查看调用sightdate_to_Date(..)
的返回值,您会注意到它是唯一的表达式mdt(sightdate)
的返回值,并且返回它是因为赋值操作符(<-
和=
)都无形地返回赋值。
最终,您需要这样的内容:
sightdate_to_Date <- function(sightdate) {
date_Object <- lubridate::mdy(sightdate)
is_wrong <- date_Object > Sys.Date()
date_Object[is_wrong] <- date_Object[is_wrong] - years(100)
date_Object
}
sightdate_to_Date("2020-02-02") # or whatever object you have