在矩阵上运行FFT时出现非数字参数错误

时间:2013-09-20 09:22:04

标签: r fft

我读取csv文件的每一行并将每行的第一个元素保存在列表中,然后我想在此列表上运行FFT,但是我收到此错误:

Error in fft(x) : non-numeric argument

在我的例子中,我读了4行:

 con<-file("C:\\bla\\test.csv","r")
    datalist<-list()
    m<-list()
    for(i in 1:4)
    {

  line<-readLines(con,n=1,warn=FALSE)
  m<-list(as.integer(unlist(strsplit(line,split=","))))
  datalist<-c(datalist,sapply(m,"[[",1))
}

datalist
close(con)
fftfun<- function(x) {fft(x)}
fft_amplitude <- function(x) {sqrt((Re(fft(x)))^2+(Im(fft(x)))^2)}  }
apply(as.matrix(datalist),2,FUN=fftfun)

我该怎么做才能解决这个问题?

修改 我在csv文件中的行:

12,85,365,145,23
13,84,364,144,21
14,86,366,143,24
15,83,363,146,22
16,85,365,145,23
17,80,361,142,21

2 个答案:

答案 0 :(得分:2)

您的代码似乎过于复杂。你为什么不这样做:

df <- read.csv("test.csv", header=FALSE)
x <- df[,1]
fft(x)

或者,如果你真的想逐行阅读:

con <- file("test.csv","r")
data <- NULL
for (i in 1:4) {
    line<-readLines(con,n=1,warn=FALSE)
    data <- c(data, as.numeric(strsplit(line,split=",")[[1]][1]))
}
close(con)
fft(data)

答案 1 :(得分:1)

让我们假设您真正的问题是:发生什么事情使得显然数字数据变为非数字?而不是在你的代码中通过令人难以置信的数量类型强制(csv到矩阵列出到as.matrix的其他列表),我建议你从简单地将一个文件读入R并检查每列的typeofclass。如果有任何结果是factor而不是numeric,您可能需要添加参数colClasses ='character'。 如果读取的数据是数字,那么您在后续转换中会将其弄清楚。尝试尽可能简化代码。