R 序列增量变化的seq()

R 序列增量变化的seq(),r,increment,seq,R,Increment,Seq,假设我想创建一个从1到15以R为基数的序列。有没有一种方法可以使增量1适用于值1至10和12至15,而增量.1适用于值10.1至11.9?基本上,我感兴趣的是如何将三个序列seq(1,10,1),seq(10.1,11.9,0.1),seq(12,15,0.1)组合成一个seq()您可以使用packagepurr中的pmap函数,因为您想并行迭代3个向量: library(purrr) from = c(1, 12, 10.1) to = c(10, 15, 11.9) by = c(1, 1

假设我想创建一个从1到15以R为基数的序列。有没有一种方法可以使增量1适用于值1至10和12至15,而增量.1适用于值10.1至11.9?基本上,我感兴趣的是如何将三个序列
seq(1,10,1)
seq(10.1,11.9,0.1)
seq(12,15,0.1)
组合成一个
seq()
您可以使用package
purr
中的
pmap
函数,因为您想并行迭代3个向量:

library(purrr)

from = c(1, 12, 10.1)
to = c(10, 15, 11.9)
by = c(1, 1, 0.1)

# Then we wrap all three vectors in a list to be able to use pmap
pmap(list(c(1, 12, 10.1), c(10, 15, 11.9), c(1, 1, 0.1)), seq)

[[1]]
 [1]  1  2  3  4  5  6  7  8  9 10

[[2]]
[1] 12 13 14 15

[[3]]
 [1] 10.1 10.2 10.3 10.4 10.5 10.6 10.7 10.8 10.9 11.0 11.1 11.2 11.3 11.4 11.5 11.6 11.7 11.8
[19] 11.9


您可以使用软件包
purr
中的
pmap
功能,因为您希望并行迭代3个向量:

library(purrr)

from = c(1, 12, 10.1)
to = c(10, 15, 11.9)
by = c(1, 1, 0.1)

# Then we wrap all three vectors in a list to be able to use pmap
pmap(list(c(1, 12, 10.1), c(10, 15, 11.9), c(1, 1, 0.1)), seq)

[[1]]
 [1]  1  2  3  4  5  6  7  8  9 10

[[2]]
[1] 12 13 14 15

[[3]]
 [1] 10.1 10.2 10.3 10.4 10.5 10.6 10.7 10.8 10.9 11.0 11.1 11.2 11.3 11.4 11.5 11.6 11.7 11.8
[19] 11.9


如果只是为了得到一个紧凑的表达式,那么可以尝试以下任何一种。特别是s5,它似乎与您所寻找的非常接近,即。矢量化seq。没有使用任何软件包

s1 <- c(1:10, 101:119 / 10, 12:15 )

s2 <- cumsum(rep(c(1, 0.1, 1), c(10, 20, 3)))

s3 <- unlist(Map(seq, c(1, 10.1, 12), c(10, 11.9, 15), c(1, 0.1, 1)))

s4 <- Filter(function(x) (x %% 10 == 0) | (x > 100 & x < 120), 10:150) / 10

s5 <- sequence(nvec = c(10, 20, 3), from = c(10, 101, 130), by = c(10, 1, 10)) / 10

# check
all.equal(s1, s2, s3, s4, s5)
## [1] TRUE

s1如果只是想得到一个紧凑的表达式,那么试试下面的任何一个。特别是s5,它似乎与您所寻找的非常接近,即。矢量化seq。没有使用任何软件包

s1 <- c(1:10, 101:119 / 10, 12:15 )

s2 <- cumsum(rep(c(1, 0.1, 1), c(10, 20, 3)))

s3 <- unlist(Map(seq, c(1, 10.1, 12), c(10, 11.9, 15), c(1, 0.1, 1)))

s4 <- Filter(function(x) (x %% 10 == 0) | (x > 100 & x < 120), 10:150) / 10

s5 <- sequence(nvec = c(10, 20, 3), from = c(10, 101, 130), by = c(10, 1, 10)) / 10

# check
all.equal(s1, s2, s3, s4, s5)
## [1] TRUE

s1但他的问题的答案是“否”,如果不将参数打包到矩阵中并使用
apply
,就无法在一个
seq
调用中获得三个L序列。更少的输入是
c(seq(1,9,1),seq(10,12,1),seq(13,15,1))
。但他的问题的答案是“否”,如果不将参数打包到矩阵中并使用
apply
,您就无法在一次
seq
调用中获得三个L序列。更少的输入是
c(seq(1,9,1),seq(10,12,1),seq(13,15,1))
。但是@markus提到你的描述与你的向量不匹配,所以你可以修改我的代码。把最后一个命令放在
unlist(pmap…
中,你就得到了一个向量。为什么不简单地使用
mapply(seq,from,to,by)
jn在这个例子中?我倾向于
purrr
package,但是还有其他方法来处理这个问题。这只是一个选择的问题。但是,正如@markus提到的,您的描述与向量不匹配,因此您可以修改我的代码。将最后一个命令放入
unlist(pmap…
中,您将得到一个向量。为什么不在本例中简单地使用
mapply(seq,from,to,by)
jn?我倾向于
purr
package,然而,还有其他方法来解决这个问题。这只是选择的问题。