R 创建迭代序列列表的一行程序?
我需要创建一个序列列表,它总是回到序列中的第一位。我已经写了下面的代码,但是看起来很笨拙。是否有一种使用更少字符的解决方案R 创建迭代序列列表的一行程序?,r,list,iteration,lapply,replicate,R,List,Iteration,Lapply,Replicate,我需要创建一个序列列表,它总是回到序列中的第一位。我已经写了下面的代码,但是看起来很笨拙。是否有一种使用更少字符的解决方案 (i=seq(1,24,by=3)) #> [1] 1 4 7 10 13 16 19 22 (i_list=purrr::map(i,~c(.:+2),) #> [[1]] #> [1] 1 2 3 1 #> #> [[2]] #> ... 编辑:这里有一种使用lappy()的方法。不知道为什么会有人投反对票,欢迎提供任何关于如何改进问题的建议 (i_lis
(i=seq(1,24,by=3))
#> [1] 1 4 7 10 13 16 19 22
(i_list=purrr::map(i,~c(.:+2),)
#> [[1]]
#> [1] 1 2 3 1
#>
#> [[2]]
#> ...
编辑:这里有一种使用lappy()
的方法。不知道为什么会有人投反对票,欢迎提供任何关于如何改进问题的建议
(i_list=lappy(i,函数(x)c(x:(x+2),x)))
我想知道是否有办法使用
replicate()
cbind(矩阵(1:24,ncol=3,byrow=TRUE),seq(1,24,by=3))
然后迭代矩阵中的行,而不是列表中的元素
或者,如果你喜欢代码高尔夫:
> seq(1,24,by=3) + t(matrix(c(0,1,2,0),ncol=8,nrow=4))
[,1] [,2] [,3] [,4]
[1,] 1 2 3 1
[2,] 4 5 6 4
[3,] 7 8 9 7
[4,] 10 11 12 10
...
但是,在这种情况下,您在构建+
的RHS方面投入了多少工作?你的问题是如何参数化的
这取决于具有规则模式的i
(对步长进行一些调整),它不适用于任意i
序列。在矩阵中,而不是列表形式,有:
cbind(矩阵(1:24,ncol=3,byrow=TRUE),seq(1,24,by=3))
然后迭代矩阵中的行,而不是列表中的元素
或者,如果你喜欢代码高尔夫:
> seq(1,24,by=3) + t(matrix(c(0,1,2,0),ncol=8,nrow=4))
[,1] [,2] [,3] [,4]
[1,] 1 2 3 1
[2,] 4 5 6 4
[3,] 7 8 9 7
[4,] 10 11 12 10
...
但是,在这种情况下,您在构建+
的RHS方面投入了多少工作?你的问题是如何参数化的
这取决于i
具有规则的模式(对步长进行了一些调整),它不适用于任意i
序列。您的代码适合一行,长度为42个字符。这有多笨重?我想知道是否有一行。你的代码可以放在一行,有42个字符。那有多笨重?我想知道有没有1号班轮。