2013-02-17 76 views
3

我想將函數exp(-r*(i/500))應用於矩陣行中的每個值(其中i表示列號)。我知道如何與一個循環做到這一點,但我努力學習的「正確」方法R.將索引函數應用於矩陣行中的每個值

我想過:

apply(st,1,function(v) { exp(-r * (i/500)*v }) 

,但我不知道如何界定值爲i,這樣它會爲每列增加。

我知道一個循環將做到這一點,但我相當肯定,不R.

+0

你的意思是每列'i'應該乘以'exp(-r * i/500)'? – Arun 2013-02-17 20:26:40

+0

是的。對於第1列'i'將是1,對於第2列'i'將是2等 – mrkb80 2013-02-17 20:27:58

回答

3

如果你必須使用apply,那麼這樣的事情?

> apply(as.matrix(seq_len(ncol(m))), 1, function(x) exp(-r * m[,x]/500)) 

其中m是你的矩陣。

當然,這裏不需要使用apply。你只需要構建一個合適的矩陣。

exp(-r * matrix(rep(1:ncol(m), nrow(m)), nrow=nrow(m), byrow=T)/500) * m 
+0

剛剛看到@juba評論。我會根據他們的建議接受你的回答。再次感謝大家! – mrkb80 2013-02-17 20:33:19

+0

+1比我的解決方案簡單得多! – juba 2013-02-17 20:34:09

+0

@ user1790121,因爲你的問題被定義爲for循環的'等價物',我以爲你想知道如何在'apply'中使用它(因爲它在內部是一個for循環)。當然你可以直接構造一個矩陣。我只是意識到這是朱巴所提供的。 – Arun 2013-02-17 20:37:01

1

也許這樣的事情的最佳方法是什麼?

## m is the matrix with your data 
m <- matrix(1:50,ncol=10,nrow=5) 
## m2 is a matrix with same dimensions and each element is the column number 
m2 <- matrix(rep(1:ncol(m),nrow(m)),ncol=ncol(m),nrow=nrow(m),byrow=TRUE) 
## Compute m2 such as each value is equal to expr(-r*(i/500)) 
m2 <- exp(-r*(m2/500)) 
## multiply m and m2 
m*m2 
+0

好極了!總是有意義的。再次感謝。 – mrkb80 2013-02-17 20:31:12

+0

@ user1790121 Arun的答案好多了,請接受!你不必複製你的矩陣來做你想做的事。 – juba 2013-02-17 20:33:12

+0

我仍然認爲這絕對是要走的路。但我只是想回答OP的問題(或者我認爲他的問題是)(關於使用'apply'知道一個等價物)。 – Arun 2013-02-17 20:37:53

3

試試這個,因爲col(st)將返回相同尺寸的矩陣st填充柱

st* exp(-r * (col(st)/500)) 

不出意外也有一排功能和他們一起可能是有用的。乘法表:

m <- matrix(NA, 12,12) 
m=col(m)*row(m) 
+1

(+1)這是一個解決方案! :) – Arun 2013-02-17 20:38:48

+0

+1哦是的! TIL「col」功能,順便說一句... – juba 2013-02-17 20:39:14

+1

我的第一個答案和Arun的答案是一樣的,但它已經被採納了,所以我需要看看我是否可以做任何更緊湊的事情。 – 2013-02-17 20:41:58

相關問題