小编Ste*_*ren的帖子

为`data.frame`发送`rbind`和`cbind`

背景

的调度机制R的功能rbind()cbind()是非标准.当其中一个论点是a时,我探索了写作rbind.myclass()cbind.myclass()函数的一些可能性data.frame,但到目前为止我还没有一个令人满意的方法.这篇文章集中于rbind,但同样适用cbind.

问题

让我们创建一个rbind.myclass()函数,只需在调用时回显.

rbind.myclass <- function(...) "hello from rbind.myclass"
Run Code Online (Sandbox Code Playgroud)

我们创建了一个类的对象,myclass以下调用rbind所有正确的调度rbind.myclass()

a <- "abc"
class(a) <- "myclass"
rbind(a, a)
rbind(a, "d")
rbind(a, 1)
rbind(a, list())
rbind(a, matrix())
Run Code Online (Sandbox Code Playgroud)

但是,当其中一个参数(这不一定是第一个)时,rbind()将调用base::rbind.data.frame():

rbind(a, data.frame())
Run Code Online (Sandbox Code Playgroud)

这种行为有点令人惊讶,但它实际上已在文档中 dispatch记录rbind().给出的建议是:

如果要将其他对象与数据帧组合在一起,可能需要先将它们强制转换为数据帧.

实际上,这个建议可能难以实施.转换为数据框可能会删除基本类信息.此外,在发出命令之后,可能不知道该建议的用户可能会遇到错误或意外结果rbind(a, x).

途径

警告用户

第一种可能性是警告用户在数据帧rbind(a, x)时不应该进行呼叫x.相反,包的用户mypackage应该显式调用隐藏函数:

mypackage:::rbind.myclass(a, x)
Run Code Online (Sandbox Code Playgroud)

这可以完成,但用户必须记住在需要时进行显式调用.调用隐藏函数是最后的手段,不应该是常规策略. …

r dispatch rbind cbind

17
推荐指数
2
解决办法
555
查看次数

标签 统计

cbind ×1

dispatch ×1

r ×1

rbind ×1