Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R在列表中的连续对上迭代_R_List - Fatal编程技术网

R在列表中的连续对上迭代

R在列表中的连续对上迭代,r,list,R,List,假设我有以下向量: v1=c(1,2,3,4) 我需要以成对的方式迭代这个向量,比如(1,2)、(2,3)、(3,4)。对于python,这里有一个解决此问题的方法:。在R中可以实现类似的解决方案吗?我们可以删除第一个和最后一个元素,并在映射 Map(c, v1[-length(v1)], v1[-1]) #[[1]] #[1] 1 2 #[[2]] #[1] 2 3 #[[3]] #[1] 3 4 或rbind并使用asplit asplit(rbind(v1[-length(v1)

假设我有以下向量:

v1=c(1,2,3,4)


我需要以成对的方式迭代这个向量,比如
(1,2)、(2,3)、(3,4)
。对于python,这里有一个解决此问题的方法:。在R中可以实现类似的解决方案吗?

我们可以删除
第一个
最后一个
元素,并在
映射

Map(c,  v1[-length(v1)], v1[-1])
#[[1]]
#[1] 1 2

#[[2]]
#[1] 2 3

#[[3]]
#[1] 3 4

rbind
并使用
asplit

asplit(rbind(v1[-length(v1)], v1[-1]), 2)
> asplit(embed(v1,2)[,2:1],1)
[[1]]
[1] 1 2

[[2]]
[1] 2 3

[[3]]
[1] 3 4

只需
cbind
移位向量

cbind(v1[-length(v1)], v1[-1])
#      [,1] [,2]
# [1,]    1    2
# [2,]    2    3
# [3,]    3    4

R是矢量化的,不需要迭代。

这些解决方案都很容易通过用其他数字替换2来推广到大于2的窗口

1)使用您想要使用的任何函数来替换
toString

library(zoo)
rollapply(v1, 2, toString)
## [1] "1, 2" "2, 3" "3, 4"
1a)或创建一个2列矩阵,然后在第二步中对其进行迭代:

library(zoo)
m <- rollapply(v1, 2, c)
apply(m, 1, toString)
## [1] "1, 2" "2, 3" "3, 4"

使用
embed
+
asplit

asplit(rbind(v1[-length(v1)], v1[-1]), 2)
> asplit(embed(v1,2)[,2:1],1)
[[1]]
[1] 1 2

[[2]]
[1] 2 3

[[3]]
[1] 3 4