R版本4.0.5的R类型强制错误

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]

几年后,我又开始使用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] 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