R版本4.0.5的R类型强制错误
几年后,我又开始使用R了 我正在使用这个旧的包“tradesys”(不再维护),它有自己的数据类型expr.frame。 这过去工作得很好,但在最新版本的R(4.0.5)中,如果我尝试将expr.frame强制为data.frame,现在会出现错误:R版本4.0.5的R类型强制错误,r,R,几年后,我又开始使用R了 我正在使用这个旧的包“tradesys”(不再维护),它有自己的数据类型expr.frame。 这过去工作得很好,但在最新版本的R(4.0.5)中,如果我尝试将expr.frame强制为data.frame,现在会出现错误: > library(tradesys) > ef <- expr.frame(1, list(St=quote(signalmap(el=c(T))))) > ef $x [1] "x" $St [1]
> library(tradesys)
> ef <- expr.frame(1, list(St=quote(signalmap(el=c(T)))))
> ef
$x
[1] "x"
$St
[1] 1
attr(,"class")
[1] "expr.frame"
attr(,"row.names")
[1] "1"
attr(,"exprlist")
attr(,"exprlist")$St
signalmap(el = c(T))
> class(ef)
[1] "expr.frame"
> as.data.frame(ef)
Error in as.data.frame.default(ef) :
cannot coerce class ‘"expr.frame"’ to a data.frame
这是我的会话信息()
如果我调用as.data.frame(ef),为什么强制函数再也找不到了?只是一个猜测,但是如果
tradesys
是包,那么包似乎没有名称空间
文件,所以它可能已经足够老了,可以在名称空间成为要求之前编写!不知道R如何处理这些较旧的包,但可能是缺少命名空间意味着S3方法(如as.data.frame.expr.frame()
)无法导出。如果您非常想使用这个包,您可以克隆它并自己创建一个名称空间
,但可能您不应该再使用该包了。我在本地安装了tradesys包,其中包含以下名称空间:#由R创建的默认名称空间#如果编辑此文件,请删除前一行#导出所有名称exportPattern(“.”)#导入作为导入或依赖导入列出的所有包(zoo,RUnit)
这应该导出包中的所有内容,对吗?是的,我认为在这种情况下应该导出方法。尝试使用sloop
查看调度。这可能会让您了解幕后的情况:sloop::s3_调度(as.data.frame(ef))
如果我尝试得到:>sloop::s3_调度(as.data.frame(ef))=>as.data.frame.expr.frame*as.data.frame.default
这意味着什么?如果我做回溯()它会直接返回as.data.frame.default()函数:>as.data.frame.default(ef)中的as.data.frame(ef)错误:无法将类“expr.frame”强制为data.frame>traceback()3:stop(gettexf(“无法将类%s强制为数据帧”,sQuote(deparse(class(x))[1L]),domain=NA)2:as.data.frame.default(ef)1:as.data.frame(ef)
> as.data.frame.expr.frame
function (x, ...)
{
structure(x, exprlist = NULL, class = "data.frame")
}
<bytecode: 0x558670386748>
<environment: namespace:tradesys>
> as.data.frame.expr.frame(ef)
x St
1 x 1
> sessionInfo()
R version 4.0.5 (2021-03-31)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 20.04.2 LTS
Matrix products: default
BLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.9.0
LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.9.0
locale:
[1] LC_CTYPE=nl_NL.UTF-8 LC_NUMERIC=C LC_TIME=nl_NL.UTF-8 LC_COLLATE=nl_NL.UTF-8 LC_MONETARY=nl_NL.UTF-8
[6] LC_MESSAGES=nl_NL.UTF-8 LC_PAPER=nl_NL.UTF-8 LC_NAME=C LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=nl_NL.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] quantmod_0.4.18 TTR_0.24.2 xts_0.12.1 tradesys_0.1 RUnit_0.4.32 zoo_1.8-9
loaded via a namespace (and not attached):
[1] compiler_4.0.5 tools_4.0.5 curl_4.3 grid_4.0.5 lattice_0.20-41