我有一些自定义日志功能是扩展的cat.一个基本的例子是这样的:
catt<-function(..., file = "", sep = " ", fill = FALSE, labels = NULL,
append = FALSE)
{
cat(..., format(Sys.time(), "(%Y-%m-%d %H:%M:%S)"), "\n", file = file,
sep = sep, fill = fill, labels = labels, append = append)
}
Run Code Online (Sandbox Code Playgroud)
现在,我使用(自制)函数进行了大量工作,并使用其中一些logfuntions来查看进度,这非常有效.但是,我注意到,我几乎总是使用这样的函数:
somefunc<-function(blabla)
{
catt("somefunc: start")
#do some very useful stuff here
catt("somefunc: some time later")
#even more useful stuff
catt("somefunc: the end")
}
Run Code Online (Sandbox Code Playgroud)
注意每个调用如何catt从调用它的函数的名称开始.非常整洁,直到我开始重构我的代码并重命名函数等.
感谢Brian Ripley的一些旧的R-list帖子,如果我没弄错的话,我发现这段代码可以获得'当前的函数名':
catw<-function(..., file = "", sep = " ", fill = …Run Code Online (Sandbox Code Playgroud) 我想知道是否有人可以帮我在函数中使用变量名.我已经整理了一个点图,它对变量进行排序然后生成一个位图,但是我无法R将变量名称传递给plot标题.
示例数据
id<-c(1,2,3)
blood<-c(1,2,10)
weight<-c(1,2,13)
mydata<-as.data.frame(cbind(id,blood,weight))
mydata$blood
#######SORTED DOT PLOT####
Dplotter<-function (id,x,Title=""){
if (is.null(Title)) {Title=""} else {Title=Title}
DIR<-paste("C:/temp/WholePlots/New/",Title,".bmp",sep="")
D<-as.data.frame(cbind(id,x))
x1<-as.data.frame(D[order(x),])
bmp(DIR)
dotchart(x1$x,labels=id,main=Title,pch=16)
dev.off()
}
###############
Dplotter(mydata$id,mydata$blood,"Blood")
Dplotter(mydata$id,mydata$weight,"Weight")
Run Code Online (Sandbox Code Playgroud)
在函数的第二行,我想传递变量名称,例如
`if (is.null(Title)) {Title=varname(x)} else {Title=Title}`
Run Code Online (Sandbox Code Playgroud)
这样我就不必在函数Title字段中输入"Blood"(例如Dplotter(mydata $ id,mydata $ blood)
基本上,如何在函数中粘贴变量名?如果可以从标题中取出数据集名称(没有附加数据集,我被告知这是不好的做法)会更好,这样mydata$blood你就可以获得标题中的"鲜血".
我没能找到一个简单的解决方案来粘贴函数中的变量名.您可以猜测,将变量名称放在
paste()函数中会返回变量的值(以便绘图标题用值而不是变量名称填充).
我还希望进一步自动化该功能,这样我就可以放置数据集和ID,然后为数据集中的每个变量重复该功能.显然,这需要首先解决问题1,否则标题和文件名都会遇到问题.