如何获得R中向量的倒数第二个元素

nhjlsmyf  于 2023-03-05  发布在  其他
关注(0)|答案(4)|浏览(597)

我正在尝试将一个向量的倒数第二个元素放到另一个向量中。有关示例,请参见此数据集
向量A

7.31 15.54  9.79  4.24  9.01  6.26 12.05  5.16 11.13  7.69  6.42 13.65 11.17 11.04  6.80  7.15 11.52 10.14 10.07 8.30

我想创建一个
载体B

15.54  9.79  4.24  9.01  6.26 12.05  5.16 11.13  7.69  6.42 13.65 11.17 11.04  6.80  7.15 11.52 10.14 10.07 8.30

但是我不想用
B<-A[2:20]
因为随着时间的推移,最后元素编号将改变(增加)

A[1:tail(A,n=1)]
[1]  7.31 15.54  9.79  4.24  9.01  6.26 12.05  5.16

这给出了一半的数据。只有8个元素。也试过

B<-A[1:last(A)]
 print(B)
[1]  7.31 15.54  9.79  4.24  9.01  6.26 12.05  5.16

它只给出了前几个元素,为什么?
我期待的答案是

15.54  9.79  4.24  9.01  6.26 12.05  5.16 11.13  7.69  6.42 13.65 11.17 11.04  6.80  7.15 11.52 10.14 10.07 8.30
cwtwac6a

cwtwac6a1#

考虑包含10个元素的向量v

v <- c(7.31, 15.54, 9.79, 4.24, 9.01, 6.26, 12.05, 5.16, 11.13, 7.69)

要获取第2个到最后一个(即第10个)元素,您需要编写硬编码,

v[2:10]
# [1] 15.54  9.79  4.24  9.01  6.26 12.05  5.16 11.13  7.69

这意味着在[括号内定义元素的 * number *。
另一方面,

v[2:tail(v, 1)]
# [1] 15.54  9.79  4.24  9.01  6.26 12.05

给出了不同的结果,因为tail()给出了元素的 * value *,在我们的示例中为:

tail(v, 1)
# [1] 7.69

所以实际上你是说,

v[2:7.69]
# [1] 15.54  9.79  4.24  9.01  6.26 12.05

其为v[2:8],因为7.69将被强制为as.integer(7.69),这产生8
您希望动态获取最后一个元素的编号,这是length()的一个任务,因此您要做的是:

v[2:length(v)]
# [1] 15.54  9.79  4.24  9.01  6.26 12.05  5.16 11.13  7.69
y3bcpkx1

y3bcpkx12#

标题是相当模糊的,我以为它会是倒数第二个元素的意义上的第二个从结束!
我很好奇为什么没有人回答这个看似显而易见的问题:

B <- A[-1]

也许负索引在任何情况下都使用tail()?希望我没有完全误解这个问题!!

kqqjbcuj

kqqjbcuj3#

看起来你想从向量A中留下一个元素,你可以简单地写B=tail(A,-1),其中-1留下第一个元素。

unhi4e5o

unhi4e5o4#

关于短名单或载体:

tail(A,-1)A[2:length(A)]对于长度≥2的列表/向量的作用相同,但是0-长度1-长度列表/向量产生不同的结果,有利于tail(A,-1)

Q0 = list()
Q1 = list(10)
C0 = c()
C1 = c(10)

tail(Q0 , -1)
# list()

tail(Q1 , -1)
# list()

tail(C0 , -1)
# NULL

tail(C1 , -1)
# numeric(0)

Q0[2:length(Q0)]
# [[1]]
# NULL
# 
# [[2]]
# NULL

Q1[2:length(Q1)]
# [[1]]
# NULL
# 
# [[2]]
# [1] 10

C0[2:length(C0)]
# NULL

C1[2:length(C1)]
# NA 10

如果您尝试从第二个元素开始迭代所有元素,这一点尤其重要:

for (item in C1[2:length(C1)]) {next} # would execute *twice*.
for (item in tail(C1, -1)) {next} # would *not* execute.

相关问题