এখানে আমি লিখেছি একটি ফাংশন। এটি base::sourceবিশ্বব্যাপী পরিবেশের তালিকা তালিকায় উত্সযুক্ত ফাইলগুলির একটি তালিকা সঞ্চয় করার জন্য ফাংশনটি আবৃত করে sourced। যদি আপনি .force=TRUEকলটিতে উত্সটিতে কোনও যুক্তি সরবরাহ করেন তবে এটি কেবল একটি ফাইলকেই পুনরায় উত্স করবে। এর আর্গুমেন্ট স্বাক্ষরটি অন্যথায় বাস্তবের মতোই source()তাই এটি ব্যবহার করতে আপনার স্ক্রিপ্টগুলি পুনরায় লেখার দরকার নেই।
warning("overriding source with my own function FYI")
source <- function(path, .force=FALSE, ...) {
library(tools)
path <- tryCatch(normalizePath(path), error=function(e) path)
m<-md5sum(path)
go<-TRUE
if (!is.vector(.GlobalEnv$sourced)) {
.GlobalEnv$sourced <- list()
}
if(! is.null(.GlobalEnv$sourced[[path]])) {
if(m == .GlobalEnv$sourced[[path]]) {
message(sprintf("Not re-sourcing %s. Override with:\n source('%s', .force=TRUE)", path, path))
go<-FALSE
}
else {
message(sprintf('re-sourcing %s as it has changed from: %s to: %s', path, .GlobalEnv$sourced[[path]], m))
go<-TRUE
}
}
if(.force) {
go<-TRUE
message(" ...forcing.")
}
if(go) {
message(sprintf("sourcing %s", path))
.GlobalEnv$sourced[path] <- m
base::source(path, ...)
}
}
এটি বেশ চমকপ্রদ (প্রচুর কল message()) যাতে আপনি যদি যত্ন নেন তবে এই লাইনগুলি বাইরে নিতে পারেন। প্রবীণ আর ব্যবহারকারীদের কোনও পরামর্শ প্রশংসা করা হয়; আমি আর তে বেশ নতুন।