0

我读取了 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
4

2 回答 2

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)
于 2013-09-20T10:15:41.320 回答
1

让我们假设您真正的问题是:发生了什么使明显的数字数据变为非数字数据?我建议您先简单地读取一个文件R并检查每一列的typeofand class. 如果结果是 afactor而不是numeric,您可能需要添加参数 colClasses='character' 。如果读取的数据是数字,那么您在随后的转换中会弄乱它。尽量简化代码。

于 2013-09-20T11:32:41.413 回答