为什么在矩阵中的R中使用diff时会出现错误

Man*_*oon 0 r

我使用csv文件读取数据

d<-read.csv("myfile.csv",header=TRUE)
Run Code Online (Sandbox Code Playgroud)

数据被正确读取并具有10列带有标题的双数据.

我想创建一个矩阵(我的话 - 不确定我在R中真正想要的)日志差异.

logs<-log(d)
Run Code Online (Sandbox Code Playgroud)

这很好,但是

diffs<-diff(logs)
Run Code Online (Sandbox Code Playgroud)

给出了这个错误:

- (长度(r) - 滞后+ 1L)<<<我不知道这意味着什么......

编辑1我的数据(抱歉必须在此输入 - 无法看到附加文件的明显方法)

A,B,C
1.1,2.1,3.1
1.2,2.2,3.2
1.3,2.3,3.3
1.4,2.4,3.4
1.5,2.5,3.5
1.6,2.6,3.6
Run Code Online (Sandbox Code Playgroud)

Ben*_*ker 5

这里的关键(和你的问题)是,虽然diff(令我惊讶的是)在矩阵上自动按列工作,但它不适用于数据帧,这是你得到的,read.csv与矩阵略有不同.

d <- read.csv(textConnection("
A,B,C
1.1,2.1,3.1
1.2,2.2,3.2
1.3,2.3,3.3
1.4,2.4,3.4
1.5,2.5,3.5
1.6,2.6,3.6"))
(logs <- log(d))
diff(logs)
Error in r[i1] - r[-length(r):-(length(r) - lag + 1L)] : 
  non-numeric argument to binary operator

diff(as.matrix(logs))
Run Code Online (Sandbox Code Playgroud)

我最初的答案是你应该使用

apply(logs,2,diff)
Run Code Online (Sandbox Code Playgroud)

明确地使用diff每一列.但是,来自?diff:

x:包含要区分的值的数字向量或矩阵....如果'x'是矩阵,则分别对每列执行差异运算.

diff(c(as.matrix(logs)))如果您想将整个事物视为单个连续(列有序)向量,您也可以这样做.