在调查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
这两个功能之间是否存在实际差异?如果是这样,它是什么?如果没有,为什么存在两个完全相同的函数?
答案 0 :(得分:2)
没有区别。 within.list
是within.data.frame
的别名。见the source
within.list <- within.data.frame
两者都存在,因此如果在within
或list
上调用data.frame
泛型,则将调度正确的方法。
如果within.list
不存在且您尝试拨打within(myList, ...)
,则会收到类似
Error in UseMethod("within") :
no applicable method for 'within' applied to an object of class "list"