【问题标题】:Possible bug: setting colnames of an xts object in the last line of a function可能的错误:在函数的最后一行设置 xts 对象的 colnames
【发布时间】:2013-08-27 21:04:25
【问题描述】:

我有一个遵循这种形式的 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/ 上进行了搜索,但没有找到任何东西。

【问题讨论】:

  • 不是错误。阅读help("function"),它说:“如果在没有调用‘return’的情况下到达函数的末尾,则返回最后一个计算表达式的值。”此外,您可以使用as.xts(read.zoo(...)),而不是从头开始编写一个全新的函数。
  • 谢谢,我会养成在函数结束时显式调用 return 的习惯
  • 您不必在每个函数结束时显式调用return,但您必须确保函数中最后一个求值的表达式是你想退货。例如。这将返回 x: f &lt;- function(x) { names(x) &lt;- NULL; x }

标签: r xts


【解决方案1】:

这不是错误。 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(...)),而不是从头开始编写一个全新的函数。

【讨论】:

    猜你喜欢
    • 2016-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-17
    • 1970-01-01
    • 2012-05-21
    • 1970-01-01
    相关资源
    最近更新 更多