我有两个列表,一个包含不同长度的字符值(dat),另一个列表在每个元素(delete_n)中有一个数字值.
dat <- list(c("Apple", "Pear"), c("Red", "Blue", "Green"), c("Toyota", "Mazda"))
delete_n <- list(0, 2, 1)
Run Code Online (Sandbox Code Playgroud)
"delete_n"中的元素与"dat"中的元素配对(delete_n [1]与dat [1]配对,依此类推)."delete_n"数字(0,2,1)告诉我每个元素中需要从每行末尾删除多少个特定列表项.
基于这个例子,我正在寻找一种解决方案,它将从dat [1]删除0项,从dat [2]删除"Blue"和"Green",从dat [3]删除"Mazda".
我首先尝试匹配元素编号,然后通过以下变体识别元素列表索引,但没有成功.mapply可能更合适,但我还不清楚如何编写function()部分.
lapply(seq_along(dat), function(x) {
sapply(seq_along(delete_n), function(y) {
x[y]
})
})
Run Code Online (Sandbox Code Playgroud)
mapply(function (x, n) {
# x is an element of dat; n is an element of delete_n
x[seq_len(length(x)-n)]
}, dat, delete_n)
Run Code Online (Sandbox Code Playgroud)
说明:
mapply该函数适用于每个元素dat和delete_n,加在一起(从而所有的第一元件,所有的第二元素,等等).
seq_len(i)制作矢量1:i,所以seq_len(length(x)-n)选择除了最后一个n元素之外的所有元素x.