在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
是否有支持此功能的软件包?
答案 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
为什么要使用其他软件包和复杂代码?