我有以下向量
v = c(F, F, F, T, F, F, F, F, F, T, F, F, F)
如何使用向量化操作更改v,以使每个v TRUE元素的前2个元素和后2个元素也设置为TRUE?也就是说,结果应为:
F, T, T, T, T, T, F, T, T, T, T, T, F
当然,可以通过在每个v元素上循环来完成此操作,但是我想了解是否有可能将这种操作向量化。与this question也不同,v中的元素是独立的,我不需要对每个元素进行计算。这是一个纯粹的索引问题。
最佳答案
这种事情可能与您将得到的向量化一样:
v[unlist(sapply(which(v),function(x) {x + c(-2,-1,1,2)},simplify = FALSE))] <- TRUE
> v
[1] FALSE TRUE TRUE TRUE TRUE TRUE FALSE TRUE TRUE TRUE TRUE TRUE FALSE
但是请注意,您尚未指定在向量末端附近的TRUE元素中应该发生的情况。那将需要更多的工作。您也没有指定如果两个TRUE元素之间的距离比两个位置更近,会发生什么情况。
或者:
v[outer(which(v),c(-2,-1,1,2),"+")] <- TRUE
> v
[1] FALSE TRUE TRUE TRUE TRUE TRUE FALSE TRUE TRUE TRUE TRUE TRUE FALSE
从基本的角度来看,我们在这里做同样的事情,但是第二种选择当然会更紧凑,尽管可能很难理解。
关于r - 如何对R中的相邻向量元素进行矢量化访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16200667/