R 将百分比变化计算应用于矩阵

R 将百分比变化计算应用于矩阵,r,matrix,R,Matrix,我试图在R中做一些相对简单的事情;我试图计算矩阵中每个组成部分从一行到下一行的百分比变化。这是我正在运行的代码 > fun <- function(x) diff(x, lag=1)/lag(x,1); > mat <- dx[2490:2520,]; > mat <- apply(mat, 2, fun); There were 30 warnings (use warnings() to see them) > warnings() Warning

我试图在R中做一些相对简单的事情;我试图计算矩阵中每个组成部分从一行到下一行的百分比变化。这是我正在运行的代码

> fun <- function(x) diff(x, lag=1)/lag(x,1);
> mat <- dx[2490:2520,];
> mat <- apply(mat, 2, fun);

There were 30 warnings (use warnings() to see them)
> warnings()
Warning messages:
1: In diff(x, lag = 1)/lag(x, 1) :
  longer object length is not a multiple of shorter object length
>趣味垫警告()
警告信息:
1:在差异(x,滞后=1)/滞后(x,1)中:
较长的对象长度不是较短对象长度的倍数

R控制台将此消息返回给我,我不知道为什么。如果这不起作用,有人能指出另一种计算百分比变化的方法吗?如果输入是
m
行和
n
列,并且您希望输出是
m-1
行和
n
列,则:

(mat <- matrix(sample(50, 15, replace = TRUE), nr=3, nc=5))
##      [,1] [,2] [,3] [,4] [,5]
## [1,]   28    2   21    9    2
## [2,]   18   11    8    2   24
## [3,]   21    2   20    8   21
apply(mat, 2, function(cc) (cc[-1] - head(cc, n = -1)) / head(cc, n = -1))
##            [,1]       [,2]       [,3]       [,4]   [,5]
## [1,] -0.3571429  4.5000000 -0.6190476 -0.7777778 11.000
## [2,]  0.1666667 -0.8181818  1.5000000  3.0000000 -0.125

(您可以使用
pctChange
lag
不会缩短向量,但
diff
会缩短向量。
nr <- nrow(mat)
(mat[-1,] - mat[-nr,]) / mat[-nr,]
##            [,1]       [,2]       [,3]       [,4]   [,5]
## [1,] -0.3571429  4.5000000 -0.6190476 -0.7777778 11.000
## [2,]  0.1666667 -0.8181818  1.5000000  3.0000000 -0.125