我正在嘗試在 R 中撰寫一個函式,它接受一個引數(矩陣)并將其中的所有奇數乘以 0.618。
這是我到目前為止所得到的,但這是我第一次使用 R 矩陣,并且不確定如何替換 for 回圈中的值,或者在乘以數字后是否更好。
uj5u.com熱心網友回復:
你可以試試下面的代碼
mat <- matrix(1:12, 3, 4)
mat2 <- mat * 0.618^(mat %% 2)
在哪里
%%檢查模超過 2
> mat %% 2
[,1] [,2] [,3] [,4]
[1,] 1 0 1 0
[2,] 0 1 0 1
[3,] 1 0 1 0
0.618^(...)給出系數
> 0.618^(mat %% 2)
[,1] [,2] [,3] [,4]
[1,] 0.618 1.000 0.618 1.000
[2,] 1.000 0.618 1.000 0.618
[3,] 0.618 1.000 0.618 1.000
uj5u.com熱心網友回復:
mat <- matrix(1:12, 3, 4)
mat[mat %% 2 != 0L] <- 0.618 * mat[mat %% 2 != 0L]
mat
# [,1] [,2] [,3] [,4]
# [1,] 0.618 4.00 4.326 10.000
# [2,] 2.000 3.09 8.000 6.798
# [3,] 1.854 6.00 5.562 12.000
使用magrittr以避免repitition:
library(magrittr)
mat[mat %% 2 != 0L] %<>% {0.618 * .}
uj5u.com熱心網友回復:
嘗試這個:
mat <- matrix(sample(80), ncol = 10)
ifelse(mat %% 2 != 0, mat * 0.618, mat)
ifelse 需要三個引數:
條件(在您的情況下,該數字可被 2 整除)
條件發生時要分配的值
如果條件不發生,則要分配的值
uj5u.com熱心網友回復:
功能oddMult需要矩陣A和乘法值v矩陣內,并且乘以奇數值A與v:
oddMult <- function(A, v){
indices <- which(A %% 2 == 1)
A[indices] <- A[indices] * v
A
}
例子:
set.seed(21)
A <- matrix(sample(20, 50, TRUE), 10, 5)
oddMult(A, 0.618)
[,1] [,2] [,3] [,4] [,5]
[1,] 20.000 4.326 6.798 3.090 18.000
[2,] 10.506 16.000 3.090 2.000 11.742
[3,] 3.090 4.000 20.000 18.000 3.090
[4,] 14.000 9.270 5.562 14.000 8.000
[5,] 4.326 18.000 8.000 9.270 9.270
[6,] 6.798 18.000 16.000 16.000 9.270
[7,] 11.742 1.854 5.562 16.000 16.000
[8,] 4.000 8.034 0.618 1.854 6.000
[9,] 5.562 6.798 1.854 5.562 16.000
[10,] 10.000 6.798 1.854 12.000 6.000
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/347566.html
上一篇:在R中從CHR轉換為DATE
