1

假设我有 2 个列表

divisor = c(0, 1, 1, 7, 7, 8, 8, 8, 9 )
remainder = c(99,  0,  1,  1, 99,  0,  1, 99,  0)

如果相应的余数不是 0,我希望除数元素元素 + 1。最终答案应如下所示:

updated.divisor = (1, 1, 2, 8, 8, 8, 9, 9, 9)

我将如何使用sapply

到目前为止我有

sapply(remainder, function(x) {
    if x != 0{
       #divisor = divisor + 1
    }
    else{
       #divisor = divisor + 0
    }
}

PS 我可能可以使用嵌套循环,但我希望能够使用sapply.

4

2 回答 2

10

您不需要循环:

divisor + (remainder!=0)
[1] 1 1 2 8 8 8 9 9 9

这是 R 的最基本原则之一:所有基本操作(和许多函数)都接受向量作为输入,并同时对该向量的所有元素执行操作。

于 2012-08-16T21:04:23.720 回答
4

对您的评论:如果您想要一个应用类型的解决方案,您会使用mapply它,因为它允许您“并排”处理两个参数:

mapply( function(x,y) {x + !(y==0)}, x=divisor, y=remainder)
#[1] 1 1 2 8 8 8 9 9 9

一个ifelse解决方案也很有意义:

 ifelse(remainder !=0, divisor+1, divisor)
#[1] 1 1 2 8 8 8 9 9 9
于 2012-08-16T23:36:47.297 回答