within.list()与within.data.frame() - 有什么区别?

时间:2014-08-16 01:00:52

标签: r

在调查within()后,我注意到它使用了列表和数据框的方法。

within
# function (data, expr, ...) 
# UseMethod("within")
# <bytecode: 0x4403f78>
# <environment: namespace:base>
methods("within")
# [1] within.data.frame within.list      
# see '?methods' for accessing help and source code

仔细阅读每个within.list()within.data.frame()的代码,我发现它们完全相同。

确认了这一点
identical(within.list, within.data.frame)
# [1] TRUE

它们似乎行为相同,并做同样的事情。拿这两个例子:

x <- list(a = 1:5, b = 6:10)
identical(
    within.list(x, { d <- 11:15 }), 
    within.data.frame(x, { d <- 11:15 }) 
)
# [1] TRUE
y <- as.data.frame(x)
identical(
    within.list(y, { d <- 11:15 }),
    within.data.frame(y, { d <- 11:15 })
)
# [1] TRUE

这两个功能之间是否存在实际差异?如果是这样,它是什么?如果没有,为什么存在两个完全相同的函数?

1 个答案:

答案 0 :(得分:2)

没有区别。 within.listwithin.data.frame的别名。见the source

within.list <- within.data.frame

两者都存在,因此如果在withinlist上调用data.frame泛型,则将调度正确的方法。

如果within.list不存在且您尝试拨打within(myList, ...),则会收到类似

的错误
Error in UseMethod("within") : 
  no applicable method for 'within' applied to an object of class "list"