我有两个列表,一个包含不同长度的字符值 (dat),另一个在每个元素中包含一个数值 (delete_n)。
dat <- list(c("Apple", "Pear"), c("Red", "Blue", "Green"), c("Toyota", "Mazda"))
delete_n <- list(0, 2, 1)
“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]
})
})
最佳答案
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)
解释:
mapply
将函数应用到 dat
和 delete_n
的每个元素,放在一起(所以所有第一个元素,所有第二个元素,等等) .
seq_len(i)
使向量 1:i
,因此 seq_len(length(x)-n)
选择除最后一个以外的所有向量x
的 n
个元素。
关于r - 根据R中另一个列表中的数字删除列表中的特定项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31332387/