r - 单线创建迭代序列列表?
问题描述
我需要创建一个总是回到序列中第一个数字的序列列表。我已经编写了下面的代码,但它看起来很笨重。有没有使用更少字符的解决方案?
(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]]
#> ...
编辑:这是一种lapply()
. 不知道为什么这会被否决,欢迎任何关于如何改进问题的建议!
(i_list = lapply(i, function(x) c(x:(x+2), x)))
我想知道是否有办法replicate()
添加该标签。
解决方案
在矩阵中,而不是列表形式中,有:
cbind(matrix(1:24, ncol=3,byrow=TRUE),seq(1, 24, by = 3))
[,1] [,2] [,3] [,4]
[1,] 1 2 3 1
[2,] 4 5 6 4
[3,] 7 8 9 7
[4,] 10 11 12 10
[5,] 13 14 15 13
[6,] 16 17 18 16
[7,] 19 20 21 19
[8,] 22 23 24 22
然后你会迭代矩阵的行而不是列表的元素。
或者,如果您喜欢代码高尔夫:
> 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
序列。
推荐阅读
- java - 无效的 Hijrah 日期:31
- reactive-programming - Reactor Flux 如何并行发布
- python - 错误:使用某个命令推送时无法推送一些参考
- pubnub - pubnub 在前端公开订阅密钥和发布密钥
- swift - 通过大型 Array Swift 过滤
- x86 - clwb+sfence,如果写入是缓存行对齐的,我们可以删除 sfence 吗?
- javascript - 将语法从 require sth 更改为 import sth
- c# - 如何将 .OrderBy 用于多个条件,有时只使用一个?
- android - Room Database SQLite - 更新的阈值是多少?尝试循环执行 100 次更新
- php - 使用 --platform 和 php fpm-alpine 的 docker 文件 alpine 的正确语法