错误 - 尝试集成时长度不同(但长度相同)

问题描述 投票:2回答:1

我有数据:

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)

当我尝试执行res时,它给了我:

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

但长度是一样的。

r integration
1个回答
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是在匿名函数的x参数和auc函数的y参数上训练的样条函数(注释函数,而不是返回值)的绝对值。

integrate函数将一系列值传递给myfunction。如果absolutearea为false,则myfunction返回每个值的样条曲线值。如果absolutearea为真,则myfunction返回函数的无意义绝对值。它永远不会抛出那个错误(非数字参数......),因为当x(由integrate传递给匿名函数的值)与y(传递给auc函数的y值)不同时,它第一次出错。

© www.soinside.com 2019 - 2024. All rights reserved.