r - 如何对R中的相邻向量元素进行矢量化访问?

标签 r

我有以下向量

 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/

相关文章:

r - 层次聚类大稀疏距离矩阵R

r - 仅将时间序列中的 NA 填充到有限数量

r - 更新特定的 R 包及其依赖项

r - 使用cuDNN内核进行LSTM

c++ - 从 R 覆盖 C++ 编译标志的系统默认值

pdf - 将日期和时间添加到 pdf 输出文件名

r - R中的非缩放神经网络数字矩阵

python - R 和 Numpy 的 QR 分解之间的差异

r - 使用 if/else 语句根据使用 R 的行的起始字母和字符串长度为列插入小数

R:奇怪的触发函数行为