使用R在矢量的不同位置处排除相同大小的块

Jan*_*nak 1 r

假设我有一个1000的长向量.

x=rnorm(1000,10,1)
Run Code Online (Sandbox Code Playgroud)

还有另一个矢量,

y<-c(1,7,10,16,29,50)
Run Code Online (Sandbox Code Playgroud)

在从矢量y指示的位置排除长度为4的块之后,我想要从"x"获得的矢量.

例如,在删除第(1-4)个组件,(7-10)组件,(16-19)组件,(29-32)和()之后,我想要一个来自"x"的向量50-53)"x"的分量.

我正在使用list:

x1=list()
for (k in 1:(length(y)-1))
{
  x1[[k]]=x[-(y[k]:(y[k]+3)),]          
}
x2=as.data.frame(x1)  
Run Code Online (Sandbox Code Playgroud)

我正在考虑很长的向量(dim = 100k),所以上面的代码效率不高.有人可以建议任何更好的代码进行上述操作吗?

the*_*ail 5

创建一组要删除的值,只创建一次子集:

x[-unlist(lapply(y, function(n) seq.int(n,n+3) ))]
Run Code Online (Sandbox Code Playgroud)

或者甚至是下面的,可能会慢一点,但会节省几个字符的输入:

x[-c(sapply(y, function(n) seq.int(n,n+3) ))]
Run Code Online (Sandbox Code Playgroud)