R 为什么在函数内部创建对象长度为零,而在函数外部不创建?

R 为什么在函数内部创建对象长度为零,而在函数外部不创建?,r,xts,R,Xts,我正在开发一个函数来帮助聚合时间序列数据,其中一些数据需要加权。此功能应能够获取间隔级别的数据,并将其聚合到每日、每周、每月、季度或年度级别。从函数中删除以下代码后,将生成预期输出,即具有适当计算的xts对象,但函数不会。我创建了以下函数(添加了打印调用以帮助我解决问题): 当我在创建的数据集上运行它时,我得到错误: NextMethod(.Generic)中出错: dims[product 274]与对象[0]的长度不匹配 print调用显示每列的长度相等,行名的数量相同(索引),并且对象仍然

我正在开发一个函数来帮助聚合时间序列数据,其中一些数据需要加权。此功能应能够获取间隔级别的数据,并将其聚合到每日、每周、每月、季度或年度级别。从函数中删除以下代码后,将生成预期输出,即具有适当计算的xts对象,但函数不会。我创建了以下函数(添加了打印调用以帮助我解决问题):

当我在创建的数据集上运行它时,我得到错误:

NextMethod(.Generic)中出错: dims[product 274]与对象[0]的长度不匹配

print调用显示每列的长度相等,行名的数量相同(索引),并且对象仍然是zoo/xts

我在下面的示例数据上运行此操作:

library(xts)

set.seed(12822)
dates = seq(as.Date("2016-01-01"),
            as.Date("2016-09-30"), by="days")
RECEIVED = rnorm(n = length(dates), mean = 8000, sd = 650)
AHT = rnorm(n = length(dates), mean = 650, sd = 15)
HANDLED = RECEIVED - rnorm(n = length(dates), mean = 240, sd = 24)
SL = rnorm(n = length(dates), mean = .75, sd = .25/3.1)
ASA = rnorm(n = length(dates), mean = 46, sd = 13)
df = cbind(dates, RECEIVED, HANDLED, AHT, SL, ASA)
#make sure to use as.xts as the xts() call is used to make NEW xts objects
a.xts = as.xts(df[, -1], order.by = dates)

set.seed(2)
dates = seq(as.Date("2016-01-01"),
            as.Date("2016-09-30"), by="days")
RECEIVED = rnorm(n = length(dates), mean = 4500, sd = 300)
AHT = rnorm(n = length(dates), mean = 700, sd = 20)
HANDLED = RECEIVED - rnorm(n = length(dates), mean = 135, sd = 13.5)
SL = rnorm(n = length(dates), mean = .65, sd = .30/3.1)
ASA = rnorm(n = length(dates), mean = 60, sd = 17)
df = cbind(dates, RECEIVED, HANDLED, AHT, SL, ASA)

b.xts = as.xts(df[, -1], order.by = dates)

all = rbind(a.xts, b.xts)
我认为需要回答的重要问题是:

是什么在函数中生成长度为零的对象? 为什么它只在函数内部而不是控制台内部运行此代码时生成?
我该如何规避/防止这种行为?

这个问题中的问题不涉及cbind中的合并,因为错误代码让我相信。相反,这是函数中不同矩阵的命名约定问题。在下面问题的答案的帮助下,我以前已经解决了将数据帧的名称传递给函数的问题

然而,我没有意识到数据帧的名称会被它淹没。在上面的代码中,我更改了行:

    y$aht = y$wkld/y$handled
    y$sl = y$sl_thresh/y$rcvd
    y$asa = y$asa_calc/y$handled
致:


这克服了错误,因为之前的y$handled调用引用了一个不存在的对象。这突出表明需要确保函数内的命名一致,以使其正常工作。

这是一个非常快的否决票。请解释我能做些什么使问题变得更好。非常感谢。
    y$aht = y$wkld/y$handled
    y$sl = y$sl_thresh/y$rcvd
    y$asa = y$asa_calc/y$handled
    y$aht = y$wkld/y[, handled]
    y$sl = y$sl_thresh/y[, rcvd]
    y$asa = y$asa_calc/y[, handled]