我在R中的「應用」類型函數掙扎。 我有一個矩陣,我想要的是使用矩陣的每一行的元素,使用一個用戶 - 定義函數根據矩陣的輸入進行一些計算,並創建一個新的函數來存儲這些計算的結果。使用矩陣的每一行中的元素應用函數
我已經找到了如何做到這一點,當函數返回只有一個輸出
因此,例如,假設矩陣A和執行某種計算的函數。
> A=matrix(1:16,nrow=4)
> A
[,1] [,2] [,3] [,4]
[1,] 1 5 9 13
[2,] 2 6 10 14
[3,] 3 7 11 15
[4,] 4 8 12 16
> B=apply(A,1,FUN=function(x) x[1]**2+2*x[2]+x[3]*x[4])
> B
[1] 128 156 188 224
我所需要的是在輸出多於一個元素的向量的情況下延伸這一點,想象例如,我想計算的三個不同多項式來代替一個值如示例並再次獲得將包含這三個多項式的計算的4×3矩陣。
目前,我正在用一個「for」循環來做這件事,循環逐行讀取數據,執行函數並將結果存儲在一個新的矩陣中,但速度很慢。 一個例子是:
A=matrix(1:16,nrow=4)
A
[,1] [,2] [,3] [,4]
[1,] 1 5 9 13
[2,] 2 6 10 14
[3,] 3 7 11 15
[4,] 4 8 12 16
calc=function(e1,e2,e3,e4){
x1=e1*e2+3*e3*e4
x2=e4+e2+5*e3**2-e4
x3=e1*e2*e3*e4
return(c(x1,x2,x3))
}
results=matrix(nrow=4,ncol=3)
for (i in 1:4){
k=calc(A[i,1],A[i,2],A[i,3],A[i,4])
results[i,]=k
}
results
[,1] [,2] [,3]
[1,] 356 410 585
[2,] 432 506 1680
[3,] 516 612 3465
[4,] 608 728 6144
的,我怎麼能採用類似操作,以避免基質的「爲」任何想法都歡迎。 (我沒有限制到應用程序包)
如果您包括您'for'循環可能更容易弄清楚如何使用'apply'重寫。 – janos
我擴展了結果 – KGeor