可能的错误:在函数的最后一行设置xts对象的colnames

时间:2013-05-08 21:04:25

标签: r xts

我有一个遵循这种形式的R函数:

CreateXtsFromFile <- function(file)
{
    data <- read.table(file, sep = ",")
    data <- xts(data[, 1], order.by = data[, 1], unique = FALSE)
    # Manipulate the data
    colnames(data) <- c("a", "b", "c")
}

但是,调用此函数会返回一个字符[3]:

data <- CreateXtsFromFile("file.txt")
str(test)
 chr [1:2] "a" "b"

但是,在删除函数中的最后一行后,同一个调用返回一个xts。奇怪的是,将最后一行移动到函数中的任何其他行也会返回一个xts。有没有人遇到过这个?我对https://bugs.r-project.org/bugzilla3/进行了搜索,但没有找到任何内容。

1 个答案:

答案 0 :(得分:3)

这不是错误。 help("function")告诉你发生了什么。它说,“如果在没有调用return的情况下到达函数的结尾,则返回最后一个计算表达式的值。”

所以你需要返回data对象:

CreateXtsFromFile <- function(file)
{
    data <- read.table(file, sep = ",")
    data <- xts(data[, 1], order.by = data[, 1], unique = FALSE)
    # Manipulate the data
    colnames(data) <- c("a", "b", "c")
    return(data)
}

此外,您可以使用as.xts(read.zoo(...))而不是从头开始编写全新的函数。