簡體   English   中英

在矩陣上運行FFT時出現非數字參數錯誤

[英]non-numeric argument error while running FFT on a matrix

我讀取了一個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

您的代碼似乎過於復雜。 你為什么不做這樣的事情:

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)

讓我們假設您真正的問題是:什么使表觀數字數據變成非數字? 我不建議您遍歷代碼中數量眾多的類型強制(將csv轉換為矩陣以將其列表另存為as.matrix),而是建議您僅將一個文件簡單地讀入R並檢查typeofclass每列。 如果結果是一個factor而不是numeric factor ,則可能需要添加參數colClasses ='character'。 如果讀取的數據是數字數據,那么您將在以后的轉換中對其進行處理。 嘗試盡可能簡化代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM