2013-02-17 79 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

相关问题