是否存在等效于Scala从R向量中丢弃或丢弃前x个元素的函数

时间:2014-06-04 20:38:48

标签: r scala

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或其他基本包中为我做这个的函数。

2 个答案:

答案 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]