Scala代码:
List(1,2,3,4,5).drop(4) // Returns List(5)
List(1,2,3,4,5).drop(5) // Returns and empty list
我煮熟的R代码。
drop = function(data, number) {
data[(number+1): length(data)]
}
drop(c(1,2,3,4,5), 4) // Returns 5
// Next one doesn't work properly
drop(c(1,2,3,4,5) 5) // Returns [1] NA 5
我可以为我的函数添加一些异常处理,但我想知道我是否缺少一个能在R base或其他基本包中为我做这个的函数。
答案 0 :(得分:4)
我认为带有负数索引的tail
会做你想要的事情
tail(c(1,2,3,4,5), -4)
# [1] 5
tail(c(1,2,3,4,5), -5)
# numeric(0)
tail(x,-n)
表示"从n
"删除第一个x
元素。
答案 1 :(得分:0)
您还可以将否定值直接应用于索引并删除这些观察值。我会说tail
/ head
更多地是为了查看给定vector / data.frame / list等的第一个/最后一个部分,否定参数确实会丢弃你想要的值,但目的是不太清楚IMO。
他们在表现方面具有可比性
> v<-rnorm(1e6)
> system.time(v[-(1:10000)])
user system elapsed
0.035 0.001 0.035
> system.time(tail(v,-10000))
user system elapsed
0.037 0.000 0.037
> identical(tail(v,-10000), v[-(1:10000)])
[1] TRUE
另外,使用索引方法,您可以删除随机的元素序列,而不仅仅是X的第一个/最后一个。
> remove<-sample(length(v),10000)
> new<-v[-remove]