如何在 R 中将两个数字的向量制作成包含序列?

How to make a vector of two numbers into inclusive sequence in R?

提问人:theforestecologist 提问时间:9/27/2016 最后编辑:theforestecologist 更新时间:9/27/2016 访问量:1123

问:

我有一个带有两个数字的向量(或矩阵等)。

是否有函数或其他简短的“单行”技巧可以使这些数字成为包含序列?

例如:

如果我有一个包含数字 1 和 15 的向量。 我想快速应用一个函数(或技巧)来生成一个包含 1:15 (1,2,3,4,5,6...15) 的新向量

我知道我可以使用该函数创建序列,但这需要我将向量(或矩阵等)中的两个数字写成“from”和“to”。seq

  • 在对 data.frames、列表或矩阵进行索引会创建长行文本的示例中,最好不必为 from/to 参数重复这些文本字符串。

例:

dat <- data.frame(a = 1:5, b = 1:5, c = 1:5, d = 1:5, e = 1:5, f = 1:5)

#Too messy/long/time-consuming if my column names are longer/more complex:   
  names(dat)[names(dat) %in% c('a','b','c','d','e')]

#Too much coding text (I'm assuming it can be done simpler):
  names(dat)[seq(from = which(names(dat) == 'a'), to = which(names(dat) == 'e'))]

#So how could I do something like the sequence example, but with less text?
  #perhaps using: which(names(dat) %in% c('a','e'))  in some way...?
R 性能 序列

评论

1赞 Rich Scriven 9/27/2016
do.call(seq, as.list(match(c("a", "e"), names(dat))))
3赞 A. Webb 9/27/2016
对于您的示例,names(subset(dat,,a:e))
0赞 theforestecologist 9/27/2016
@A.Webb:太棒了!但我想知道你为什么说“以你为榜样”。这仅仅是 b/c 你使用我的例子来告知你的方法用法的例子,还是因为你认为这可能并不总是一个适用的方法?
0赞 theforestecologist 9/27/2016
只是出于好奇:到目前为止,我已经对所描述的 4 种方法中的每一种进行了 100,000 次迭代(我的 2 种来自问题,Rich 的和 A. Webb 的)。有趣的是,子集方法最慢(平均 2.26e-4 秒),其次是 do.call 方法(0.54e-4 秒),然后是 seq 方法(0.47e-4 秒),最后是简单列表方法最快(0.30e-4 秒)。因此,速度与代码复杂性成反比 - 更准确地说,代码长度 - 对于这个例子......
1赞 A. Webb 9/29/2016
@theforestecologist我的意思是.这不适用于向量。是的,不幸的是,你通常会为 R 中的抽象付费。data.frames

答: 暂无答案