如何仅从列表的特定元素中减去

时间:2016-07-13 22:26:24

标签: r list lapply subtraction

好的,我有一个包含829个元素的列表(名为“datalist”)。每个元素中的数字的范围是1到676,但是当元素是长度大于1的向量时,我的代码循环回到676的开头。我正在寻找一种方法,只从列表中大于676的值中减去676.我尝试使用lapply无济于事。下面是列表的一小部分,后面是我的代码和错误消息。谢谢!

[[825]]
[1] 429 496

[[826]]
[1] 8 895 1181

[[827]]
[1] 6

[[828]]
[1] 901 916 1298 1299 1302 1307

代码:

sub <- function(x){
 for(i in datalist[x]){
  if(i > 676)
   i = i-676
 }
}

lapply(1:829, sub)

代码将所有列表元素返回为NULL并提供以下错误消息。

错误讯息:

1-50: In if (i > 676) i = i - 676 :
 the condition has length > 1 and only the first element will be used

我正在寻找的是输出代码:

[[825]]
[1] 429 496

[[826]]
[1] 8 219 505

[[827]]
[1] 6

[[828]]
[1] 225 240 622 623 626 631

1 个答案:

答案 0 :(得分:1)

尝试:

sub <- function(x) {x[x > 676] <- x[x > 676] - 676}
lapply(datalist, sub)

此外,如果所有大于676的值都小于2 * 676,则sub可以是:

sub <- function(x) {x %% 676} #returns modulo