假设我有2个列表
divisor = c(0, 1, 1, 7, 7, 8, 8, 8, 9 )
remainder = c(99, 0, 1, 1, 99, 0, 1, 99, 0)
Run Code Online (Sandbox Code Playgroud)
如果相应的余数不是0,我想要一个divisor 元素为元素+ 1.最终的答案应如下所示:
updated.divisor = (1, 1, 2, 8, 8, 8, 9, 9, 9)
Run Code Online (Sandbox Code Playgroud)
我该如何使用sapply?
到目前为止我有
sapply(remainder, function(x) {
if x != 0{
#divisor = divisor + 1
}
else{
#divisor = divisor + 0
}
}
Run Code Online (Sandbox Code Playgroud)
PS我可能使用嵌套循环,但我希望能够使用它sapply.
你不需要循环:
divisor + (remainder!=0)
[1] 1 1 2 8 8 8 9 9 9
Run Code Online (Sandbox Code Playgroud)
这是R的最基本原则之一:所有基本操作(和许多函数)都接受向量作为输入,同时对该向量的所有元素执行操作.
对于您的评论:如果您想要一个应用类型解决方案,您可以使用它mapply,因为它允许您“彼此并排”处理两个参数:
mapply( function(x,y) {x + !(y==0)}, x=divisor, y=remainder)
#[1] 1 1 2 8 8 8 9 9 9
Run Code Online (Sandbox Code Playgroud)
一个ifelse解决方案也是有意义的:
ifelse(remainder !=0, divisor+1, divisor)
#[1] 1 1 2 8 8 8 9 9 9
Run Code Online (Sandbox Code Playgroud)