最近,我正在学习R的数据框。您知道我们可以像下面这样子集R的data.frame:
foo <- data.frame(mpg[1:5, ])
foo[1:2,3:4]
># displ year
># 1 1.8 1999
># 2 1.8 1999
但是我碰巧在[]中添加了第三个维度,例如下面的代码,并对其进行了摘录,
foo[1:2, 3:4, 5]
># displ year
># 1 1.8 1999
># 2 1.8 1999
我以为会抛出异常。但是,一切顺利。
以我的理解,R的data.frame是一种二维表。那么为什么我可以使用3维来在R中对数据帧进行子集化呢?这些代码背后发生了什么?基本原理是什么?
当我尝试使用第4维或更大尺寸来子集数据框时foo[1:2, 3:4, 5, 6]
,这次它会弹出一个错误Error in [.data.frame (foo, 1:2, 3:4, 5, 6): unused argument (6)
。我现在很困惑。
欢迎任何帮助,不胜感激。
在A上data.frame
,S3调度表示您正在使用[.data.frame
;您可以使用formals
或来查看其参数args
:
args(`[.data.frame`)
# function (x, i, j, drop = if (missing(i)) TRUE else length(cols) == 1)
formals(`[.data.frame`)
# $x
# $i
# $j
# $drop
# if (missing(i)) TRUE else length(cols) == 1
您可以咨询?"[.data.frame"
有关这些参数含义的更多详细信息。
至于为什么它没有失败,这可能是由于懒惰的评估。您可以查看Hadley的书,或者在附近搜索“惰性评估R”以获取更多资源
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句