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

あなたの本当の質問は次のとおりだとしましょう: 明らかに数値データが非数値になるのはなぜですか? コード内の信じられないほどの数の型強制 (csv からマトリックス、別のリストから as.matrix へのリスト) に苦労するよりも、単純に 1 つのファイルを読み込んで各列のandRをチェックすることから始めることをお勧めします。 . ではなく であることが判明した場合は、引数 colClasses='character' を追加する必要がある場合があります。読み取ったデータが数値である場合、その後の変換でデータを汚しています。コードをできるだけ単純化してみてください。typeofclassfactornumeric

于 2013-09-20T11:32:41.413 に答える