在我加载sf包之后尝试获取字段上的units属性时出现错误。
以下是可重现的例子。
library(Hmisc)
fail.time <- c(10,20)
units(fail.time) <- "Day"
library(sf)
units(fail.time) <- "Day"
Error: inherits(value, "units") || inherits(value, "symbolic_units") is not TRUE
如果我指定包和函数我得到错误,则会出现不同的错误消息
Hmisc::units(fail.time) <- "Day"
Error: 'units<-' is not an exported object from 'namespace:Hmisc'
如何解决此错误
答案 0 :(得分:3)
通常我发现LyzandeR的答案很有帮助。这个时间没那么多。这个问题在Hmisc :: units<-
函数中提出了一个显然 not 的错误消息,因为它不会发生在units(fail.time) <- "Day"
的第一个实例上,而是发生在pkg之后:sf已加载。如果您查看sf
的说明文件,则会发现它有Imports:units
。事实上,正是units::unit<-.numeric
引发了最初的神秘错误。如果你只加载Hmisc(而不是sf)重新启动R,你会发现只有两个units<-
方法:
> methods(`units<-`)
[1] units<-.default units<-.difftime
see '?methods' for accessing help and source code
如果加载sf包,你现在可以看到它是(新加载的)units::units<-.numeric
函数抛出错误,因为该包由sf
加载,并且因为实际上没有预先存在的.numeric
版本的函数,对现有函数的域进行了“屏蔽”(可能更准确地说是“转移”),并且没有自动生成的警告。
> library(sf)
Linking to GEOS 3.6.1, GDAL 2.1.3, proj.4 4.9.3
> methods(`units<-`)
[1] units<-.default units<-.difftime units<-.numeric* units<-.units*
see '?methods' for accessing help and source code
> getAnywhere(`units<-.numeric`)
A single object matching ‘units<-.numeric’ was found
It was found in the following places
registered S3 method for units<- from namespace units
namespace:units
with value
function (x, value)
{
stopifnot(inherits(value, "units") || inherits(value, "symbolic_units"))
if (inherits(value, "units"))
value <- units(value)
attr(x, "units") = value
class(x) <- "units"
x
}
<environment: namespace:units>
包的维护者现在意识到我们中的一些人有困惑:
maintainer('sf')
[1] "Edzer Pebesma <edzer.pebesma@uni-muenster.de>"
答案 1 :(得分:2)
我将覆盖Error: 'units<-' is not an exported object from 'namespace:Hmisc'
错误,忽略sf
错误,该错误在42-anwser中有所涵盖。
units<-
是替换函数。当函数位于assingment运算符的左侧时,您会看到这些特殊函数,如:
units(fail.time) <- "Day"
所以,无论如何你都不需要Hmisc::units
。我最初的猜测是你需要units<-
。但是这显然不是从Hmisc
导出的(正如您在错误中看到的那样)。您实际需要的是从units<-.default
导出的反直观Hmisc
方法。这有效:
fail.time <- c(10,20)
Hmisc::`units<-.default`(fail.time, "Day")
#[1] 10 20
#attr(,"units")
#[1] "Day"
当您使用units(fail.time) <- "Day"
时,上面就是您实际呼叫的内容。
只是为了完成,这就是units<-.default
的样子:
`units<-.default`
#function (x, value)
#{
# attr(x, "units") <- value
# x
#}
#<environment: namespace:Hmisc>