从函数内运行并“结束”接收器

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

我想在函数中使用接收器。

让我们创建一个文件以获得可重现的示例:

write.table("stop('error message')", "sampleError.R")

首先是一个工作示例 - 在函数之外:

con <- file("test.log")
sink(con, append = TRUE)
sink(con, append = TRUE, type="message")

source("sampleError.R", echo = TRUE, max.deparse.length = 10000)

sink() 
sink(type = "message")

logFile <- readLines("test.log")

现在尝试在函数中调用它失败。失败的是记录未完成,必须在函数外部调用

sink()
命令来完成日志创建。

f <- function(){
  con <- file("test.log")
  sink(con, append = TRUE)
  sink(con, append = TRUE, type="message")

  source(filePath, echo = TRUE, max.deparse.length = 10000)

  sink() 
  sink(type = "message")

  logFile <- readLines("test.log")
}
f()

是的,不幸的是我必须坚持从函数中调用它;)

r
1个回答
0
投票

如果您嵌套接收器语句,从而交换最后两个接收器语句,它应该可以工作。

也可能导致错误的是您使用了 filepath 参数,但从未在函数头中声明它:

f <- function(filepath) {
...
}
© www.soinside.com 2019 - 2024. All rights reserved.