我想写一个callback function来检测和记录R会话期间的任何文件访问。
在R中有大量不同的内置方法来打开连接,所以在我的回调函数的expression参数中搜索‘打开’,‘文件’,'url',‘读取’,‘保存’等是不可靠的。一定有一些通用的事件,所有这些不同的连接操作函数都汇聚在一起,对吗?
那么,我如何以平台无关的方式以编程方式检测这样的事件呢?谢谢。
以下内容不起作用。我猜在触发回调的时候连接已经关闭了…
cb <- taskCallbackManager();
cb$add(function(xpr,val,ok,visible){
if(length( cons<-showConnections())>0) print( cons)
else print('0');
TRUE;
},'mycb');
# [1] "mycb"
# [1] "0"
sample <- read.table("http://www.ats.ucla.edu/stat/examples/ara/angell.txt")
# [1] "0"发布于 2018-09-18 23:44:00
我仍然没有找到答案,但我已经找到了一种解决方法。大多数文件访问函数都遵循类似的语法,将文件的位置作为第一个参数,所以我编写了一个包装器,可以使用它们中的大多数函数,遵循以下模式:
tread <- function(file,...,readfun){
filename <- deparse(match.call()$file);
loaded <- readfun(file,...);
# put your logging/MD5-check/whatever here
return(loaded);
}它甚至可以在多作者设置中透明地使用,方法是在脚本或某个全局配置文件的开头将read_csv重新分配给包装器,使其成为readr::read_csv的完全限定名称(在本例中为
https://stackoverflow.com/questions/43329147
复制相似问题