0

2 つのベクトルが与えられ、ab. ベクトルには、さまざまなシーケンスの始点 (a) と終点 (b) が含まれています。これらのシーケンスは、ターゲット ベクターで 1000 に設定する必要がありますvecmapplyこの目的で使用しようとしていますが、結果は期待どおりではありません。

a <- c(2,10,15)
b <- c(4,13,18)
vec <- sample(1:18,18)

mapply(function(a, b){
  vec[a:b] <- 1000; vec
},a,b)

別のスレッドから実行できることはわかっていますが、この場合、意図したとおりに機能しない理由vec[unlist(Map(":", a, b))] <- 1000について詳しく知りたいです。mapply

結果は、ベクトルではなくマトリックスの形式になります。つまり、変更は元のベクトルには保存されません。これはどのように行うことができますか?おそらく簡単な修正です(ただし、ドキュメントや他の場所では何もわかりません)

      [,1] [,2] [,3]
[1,]   13   13   13
[2,] 1000    2    2
[3,] 1000   17   17
[4,] 1000   12   12
[5,]   14   14   14
[6,]    9    9    9
[7,]   16   16   16
[8,]    4    4    4
[9,]   15   15   15
[10,]   18 1000   18
[11,]    6 1000    6
[12,]    3 1000    3
[13,]   11 1000   11
[14,]    1    1    1
[15,]   10   10 1000
[16,]    7    7 1000
[17,]    5    5 1000
[18,]    8    8 1000
4

2 に答える 2