好的,我有一个包含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
答案 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