for
ループの代わりにベクトル化演算を使用してください。また、数値がプライムであるかどうかを判断する関数も必要です。可能なアルゴリズムはいくつかありますが、ベースRには組み込まれていません。ここでnumbers::isPrime
を使用しますが、好きな場合は独自のプライム・シーブやその他のアルゴリズムを最初から書くことができます。
まず、いくつかのセットアップ:
library(numbers)
set.seed(47) # for reproducibility
mat <- matrix(rpois(100, 10), 10) # sample matrix
mat
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
## [1,] 16 6 8 7 12 14 10 12 9 14
## [2,] 12 4 7 8 13 9 7 5 14 15
## [3,] 10 12 4 15 15 14 12 10 10 12
## [4,] 9 8 3 9 16 13 12 10 9 9
## [5,] 10 7 9 9 14 14 10 13 8 11
## [6,] 6 7 9 13 12 6 7 10 8 11
## [7,] 10 11 8 8 9 5 10 14 12 11
## [8,] 14 8 10 7 10 12 8 5 12 14
## [9,] 4 14 6 5 10 13 7 12 10 6
## [10,] 7 7 10 13 15 16 13 7 9 9
基準を満たしているサブセットに割り当て、関数を定義する:
double_primes <- function(m){
m[isPrime(m)] <- m[isPrime(m)] * 2;
m
}
double_primes(mat)
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
## [1,] 16 6 8 14 12 14 10 12 9 14
## [2,] 12 4 14 8 26 9 14 10 14 15
## [3,] 10 12 4 15 15 14 12 10 10 12
## [4,] 9 8 6 9 16 26 12 10 9 9
## [5,] 10 14 9 9 14 14 10 26 8 22
## [6,] 6 14 9 26 12 6 14 10 8 22
## [7,] 10 22 8 8 9 10 10 14 12 22
## [8,] 14 8 10 14 10 12 8 10 12 14
## [9,] 4 14 6 10 10 26 14 12 10 6
## [10,] 14 14 10 26 15 16 26 14 9 9
''それはコードで、その後のすべての要素を... '掛ける必要がありますMATR2 [i、j] < - MATR1 [i、j]/2'、typo? – zx8754