3

我想将该函数exp(-r*(i/500))应用于矩阵行中的每个值(其中i表示列号)。我知道如何使用循环来做到这一点,但我正在尝试学习 R 中的“正确”方法。

我想过:

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

但我不知道如何定义 value i,这样它就会为每一列增加。

我知道一个循环会完成这个,但我相当肯定这不是 R 中的最佳方法。

4

3 回答 3

3

试试这个,因为将返回一个与填充列col(st)相同维度的矩阵st

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

毫不奇怪,还有一个行功能,它们一起可以很有用。乘法表:

m <- matrix(NA, 12,12)
m=col(m)*row(m)
于 2013-02-17T20:37:24.720 回答
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
于 2013-02-17T20:31:46.063 回答
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
于 2013-02-17T20:28:22.613 回答