我希望将我拥有的对象列表中的每个nth:nth(+ jth)对象连接起来。更具体地说,我希望将每两个对象连接在一起。 下面是该列表的一小部分示例。
const db = require('path/to/sequelize/file');
db.Shop.create(data);
我想从中创建一个更接近此列表的新列表。
list("SRR1772151_1.fastq", "SRR1772151_2.fastq", "SRR1772152_1.fastq",
"SRR1772152_2.fastq", "SRR1772153_1.fastq", "SRR1772153_2.fastq")
我已尝试进行以下操作,但是我的for循环未成功。
list(c("SRR1772151_1.fastq", "SRR1772151_2.fastq"), c("SRR1772152_1.fastq",
"SRR1772152_2.fastq"), c("SRR1772153_1.fastq", "SRR1772153_2.fastq"
))
任何帮助或建议,将不胜感激。
答案 0 :(得分:1)
您可以将其分为两个问题-拆分列表,例如
elts = split(lst, 1:2)
并连接元素
Map(c, elts[[1]], elts[[2]])
但是我认为最好遵循“整洁”的数据做法并创建具有分组因子的单个向量
df = data.frame(fastq = unlist(x), grp = 1:2, stringsAsFactors = FALSE)
或更具有描述性
df = data.frame(
fastq = unlist(lst),
sample = factor(sub("_[12].fastq", "", unlist(lst))),
stringsAsFactors = FALSE
)
最好使用整洁的数据,因为人们可以少做些事,例如,请注意,使用列表时,您必须了解split()
和Map()
和c()
,而不用矢量和数据帧!
答案 1 :(得分:1)
这是使用数据帧的另一种尝试。输出是一个列表。
library(tidyverse)
data.frame(X1 = unlist(my_list), stringsAsFactors = F) %>%
group_by(str_sub(X1,1,10)) %>% # assuming first 10 characters forms the string
summarise(list_value=list(X1)) %>%
pull(list_value)
答案 2 :(得分:1)
对于一般情况,您可以使用以下内容创建大小为j
的连续组的向量:
ceiling(seq_along(x) / j)
…,然后使用tapply()
连接这些组中的所有元素。与使用Map()
不同,如果块大小没有均等地划分列表的长度,这也将起作用。
x <- list("SRR1772151_1.fastq", "SRR1772151_2.fastq", "SRR1772152_1.fastq",
"SRR1772152_2.fastq", "SRR1772153_1.fastq", "SRR1772153_2.fastq")
tapply(x, ceiling(seq_along(x) / 2), unlist)
#> $`1`
#> [1] "SRR1772151_1.fastq" "SRR1772151_2.fastq"
#>
#> $`2`
#> [1] "SRR1772152_1.fastq" "SRR1772152_2.fastq"
#>
#> $`3`
#> [1] "SRR1772153_1.fastq" "SRR1772153_2.fastq"
tapply(x, ceiling(seq_along(x) / 4), unlist)
#> $`1`
#> [1] "SRR1772151_1.fastq" "SRR1772151_2.fastq" "SRR1772152_1.fastq"
#> [4] "SRR1772152_2.fastq"
#>
#> $`2`
#> [1] "SRR1772153_1.fastq" "SRR1772153_2.fastq"
由reprex package(v0.2.1)于2019-06-12创建