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の最も基本的な原則の1つです。すべての基本操作(および多くの関数)は、入力としてベクトルを受け入れ、そのベクトルのすべての要素に対して同時に操作を実行します。

于 2012-08-16T21:04:23.720 に答える
4

コメントへ:適用タイプのソリューションが必要な場合は、mapply2つの引数を「互いに並行して」処理できるため使用します。

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 に答える