R 省略序列中的最后一个元素
R omit last element in sequence
当我们需要 R 中的序列时,我们使用以下任一构造:
> 1:5
[1] 1 2 3 4 5
> seq(1,5)
[1] 1 2 3 4 5
这会产生一个从开始到结束(包括)的序列
有没有办法生成一个从开始到停止的序列(独占)?喜欢
[1] 1 2 3 4
此外,我不想使用减号运算符之类的解决方法,例如:
seq(1,5-1)
这是因为我希望我的代码中有优雅简洁的语句。在我的真实示例中,start
和 stop
不是硬编码整数,而是描述性变量名称。使用 variable_name -1
结构只是我的脚本更难看,难以让审阅者阅读。
PS:这个问题和remove the last element of a vector那个问题的区别在于我要求生成序列,而前者侧重于删除向量的最后一个元素
此外,此处提供的答案与我的问题不同且相关
一个可能的解决方案是
head(1:5, -1)
# [1] 1 2 3 4
或者您可以定义自己的函数
seq_last_exclusive <- function(x) return(x[-length(x)])
seq_last_exclusive(1:5)
# [1] 1 2 3 4
我们可以使用下面的函数
f <- function(start, stop, ...) {
seq.int(from = start, to = stop - 1L, ...)
}
测试
f(1, 5)
# [1] 1 2 3 4
它应该非常有效,因为我们不生成序列 1:5
然后对其进行子集化。
当我们需要 R 中的序列时,我们使用以下任一构造:
> 1:5
[1] 1 2 3 4 5
> seq(1,5)
[1] 1 2 3 4 5
这会产生一个从开始到结束(包括)的序列 有没有办法生成一个从开始到停止的序列(独占)?喜欢
[1] 1 2 3 4
此外,我不想使用减号运算符之类的解决方法,例如:
seq(1,5-1)
这是因为我希望我的代码中有优雅简洁的语句。在我的真实示例中,start
和 stop
不是硬编码整数,而是描述性变量名称。使用 variable_name -1
结构只是我的脚本更难看,难以让审阅者阅读。
PS:这个问题和remove the last element of a vector那个问题的区别在于我要求生成序列,而前者侧重于删除向量的最后一个元素 此外,此处提供的答案与我的问题不同且相关
一个可能的解决方案是
head(1:5, -1)
# [1] 1 2 3 4
或者您可以定义自己的函数
seq_last_exclusive <- function(x) return(x[-length(x)])
seq_last_exclusive(1:5)
# [1] 1 2 3 4
我们可以使用下面的函数
f <- function(start, stop, ...) {
seq.int(from = start, to = stop - 1L, ...)
}
测试
f(1, 5)
# [1] 1 2 3 4
它应该非常有效,因为我们不生成序列 1:5
然后对其进行子集化。