无法区分 R 中的 left() 和 right()

Cru*_*ing 2 r

Rgdata::left()gdata::right()实际上是相同的函数,但名称不同并且完全按照它们应有的方式工作,还是我错误地使用了它们?

我有:mtcars

我想要:仅最后两列mtcars

(我知道我可以向mtcars[,(length(mtcars)-1):(length(mtcars))],但如果有更简单的方法,我为什么要这么做呢?)

我想要的看起来像这样:

                    gear carb
Mazda RX4              4    4
Mazda RX4 Wag          4    4
Datsun 710             4    1
Hornet 4 Drive         3    1
Hornet Sportabout      3    2
...
Run Code Online (Sandbox Code Playgroud)

看起来right(mtcars,2)可以实现这一点,但它却给出了

                     mpg cyl
Mazda RX4           21.0   6
Mazda RX4 Wag       21.0   6
Datsun 710          22.8   4
Hornet 4 Drive      21.4   6
Hornet Sportabout   18.7   8
...
Run Code Online (Sandbox Code Playgroud)

这与以下完全相同left(mtcars,2)

                     mpg cyl
Mazda RX4           21.0   6
Mazda RX4 Wag       21.0   6
Datsun 710          22.8   4
Hornet 4 Drive      21.4   6
Hornet Sportabout   18.7   8
...
Run Code Online (Sandbox Code Playgroud)

我的主要问题是,从数据框中获取最右边的 n 列的最简单方法是什么?我想要一些东西,希望是基础 R,不需要知道 的总列数mtcars

iod*_*iod 5

gdata 中似乎存在一个奇怪/愚蠢的错误。如果您查看left/right的源代码,您会发现这两个函数都有一个UseMethod("left"). 据我了解,这意味着使用 data.frame 进行调用将导致调用left.data.frame. 事实上,如果我输入

right <- function(x, n=6L) UseMethod("right")
Run Code Online (Sandbox Code Playgroud)

然后right(mtcars,2)按预期工作。

  • 很好地挖掘了问题的根源,@iod。您可以在此处将其作为 GitHub 问题提交:https://github.com/warnes/gdata/issues (2认同)