R использование diff: нечисловой аргумент для ошибки двоичного оператора

мы разбираем CSV-файл с некоторыми числами с помощью следующей команды:

tt <- read.table("test2.csv",sep=";",stringsAsFactors=FALSE)

и это работает. Печатьtt[1,] дает хороший вектор и sd(tt[1,]) - это разумно.

однако, когда мы пытаемся

diff(tt[1,])

командная строка возвращает ошибку:

Error in r[i1] - r[-length(r):-(length(r) - lag + 1L)] :
    non-numeric argument to binary operator error

почему это? Есть идеи?

2 ответов


Я полагаю, что в вашей tt[1,], что

class(tt[1,])
# [1] "data.frame"

если вы используете as.numeric, вы должны быть хорошо. Попробуйте это:

diff(as.numeric(tt[1,]))

вот пример, который мы можем проверить:

tt <- data.frame(x = 1, y = 2)
is.vector(tt[1,])
# [1] FALSE
class(tt[1,])
# [1] "data.frame"
diff(tt[1,])
# Error in r[i1] - r[-length(r):-(length(r) - lag + 1L)] : 
#   non-numeric argument to binary operator
as.numeric(tt[1,])
# [1] 1 2
diff(as.numeric(tt[1,]))
# [1] 1

Это также работает:

for (i1 in 1:length(dat.diff))
{
diffy <- diff(as.numeric(dat.diff[,i1]))
dat.diff[,i1] <- c(diffy, NA)
}