2017-12-18 132 views
2

我有數據:錯誤 - 長度不同當試圖整合(但長度相同)

Date     Value 
17/12/17 8:39:45 1144.5783 
17/12/17 8:40:02 1646.5863 
17/12/17 8:40:15 1104.4177 
17/12/17 8:40:30 1244.9799 
17/12/17 8:40:45 1084.3373 
17/12/17 8:41:00 1285.1406 
17/12/17 8:41:15 1144.5783 
17/12/17 8:41:30 1124498 
17/12/17 8:41:45 1265.0602 
17/12/17 8:42:00 1124498 
17/12/17 8:42:15 1144.5783 
17/12/17 8:42:30 1164.6586 
17/12/17 8:42:45 1084.3373 
17/12/17 8:43:00 1184739 
17/12/17 8:43:15 1064257 
17/12/17 8:43:30 1164.6586 
17/12/17 8:43:45 1184739 
17/12/17 8:44:00 1244.9799 

我想要的日期期間來計算積分。 我的真實數據由3124行組成。

library(lubridate) 
library(MESS) 

thedata <- read.csv('data.csv') 

datetime <- dmy_hms(as.character(thedata$Date)) 
time_length_data <- time_length(interval(datetime[1] , datetime[18]), "second") 
# data is gathered by almost every 15 sec 
divide_data <- 1:(time_length_data/15) 
# I am ommiting a few rows in order to have the same length as "sec" matrix below. 
divide_data <- divide_data[1:18] 

# this contains the values and has length 18 
sec <- as.numeric(as.matrix(thedata[2])) 

res <- auc(divide_data, sec, from = min(divide_data), to = max(divide_data), type = 'spline', absolutearea = TRUE) 

當我嘗試執行資源,它給了我:

Error in xy.coords(x, y, setLab= FALSE): 'x' and 'y' lengths differ 

但長度相同。

+0

您能否根據小的子樣本更新您的問題?忘記你的真實數據3124行。 –

+1

你的'auc'函數從哪裏來? – kath

+0

我假設你的'auc'來自'MESS',但你應該在你的例子中包含它。 – Eumenedies

回答

2

我相信這是MESS程序包中的一個錯誤,absolutearea標誌設置爲TRUE

如果你看一下代碼爲auc:這裏出現

if (absolutearea) 
    myfunction <- function(x) { abs(splinefun(x, y, method="natural")) } 
else 
    myfunction <- splinefun(x, y, method="natural") 

res <- integrate(myfunction, lower=from, upper=to)$value 

兩個問題,x指定了兩次,splinefun返回一個函數,而不是一個值。

如果absolutearea是假,則myfunction是訓練有素的auc參數xy樣條函數。

如果absolutearea爲真,則myfunction是樣條函數的絕對值(注意函數,而不是返回值)的培訓上的匿名函數的參數xauc功能的y說法。

integrate函數將一系列值傳遞給myfunction。如果absolutearea爲false,則myfunction將返回每個值處的樣條曲線值。如果absolutearea爲真,則myfunction返回函數的無意義絕對值。它不會拋出錯誤(非數字參數...),因爲x(由integrate傳遞給匿名函數的值)與y(傳遞給auc函數的y值)的長度不同會導致第一次錯誤。

+0

完美答案和問題解釋。用戶(您?)提交了修復程序,新版本應該啓動並運行。謝謝! – ekstroem