索引到向量时的自引用

时间:2014-08-26 14:20:15

标签: r

在R中,有没有办法从向量中引用向量?

说我有长名字的矢量:

my.vector.with.a.long.name <- 1:10

而不是:

my.vector.with.a.long.name[my.vector.with.a.long.name > 5]

这样的事情会很好:

> my.vector.with.a.long.name[~ > 5]
[1]  6  7  8  9 10

或者,通过函数进行索引会很方便:

> my.vector.with.a.long.name[is.even]
[1]  2  4  6  8 10

是否有支持此功能的软件包?

4 个答案:

答案 0 :(得分:8)

您可以使用允许使用.进行自引用的管道:

library(pipeR)
my.vector.with.a.long.name %>>% `[`(.>5)
[1]  6  7  8  9 10
my.vector.with.a.long.name %>>% `[`(.%%2==0)
[1]  2  4  6  8 10

答案 1 :(得分:5)

Filter功能有助于此

my.vector.with.a.long.name <- 1:10
Filter(function(x) x%%2==0, my.vector.with.a.long.name)

is.even <- function(x) x%%2==0
Filter(is.even, my.vector.with.a.long.name)

答案 2 :(得分:0)

所以,你基本上都在问你是否可以使用变量名以外的东西来引用它。最简洁的答案是不。这就是变量名称背后的整个想法。如果您想要一个较短的名称,请将其命名为更短的名称。

更长的答案取决于它。你真的只是以长形式使用逻辑索引。为了缩短它/不必一次引用它而不必输入那个巨大的名字,只需将它保存在这样的矢量中:

gt5 <- my.vector.with.a.long.name > 5
[1] FALSE FALSE FALSE FALSE FALSE TRUE...

my.vector.with.a.long.name[gt5]
[1] 6 7 8 9 10

只要返回索引或逻辑向量,就可以对函数执行相同的操作。

dplyr包允许你做一些很酷的链接,你可以使用%.%运算符来获取运算符的LHS并输入RHS函数调用的第一个参数。

在dplyr包中使用以下内容很酷:

data %.% group_by(group.var) %.% summarize(Mean=mean(ID))

而不是:

summarize(group_by(data, group.var), Mean=mean(ID)).

答案 3 :(得分:0)

您可以使用较短的名称轻松创建另一个对象:

my.vector.with.a.long.name <- 1:10

mm = my.vector.with.a.long.name 

mm
 [1]  1  2  3  4  5  6  7  8  9 10

mm[mm<5]
[1] 1 2 3 4

mm[mm>5]
[1]  6  7  8  9 10

为什么要使用其他软件包和复杂代码?

相关问题