R:在用户定义的Fn中,我可以合并延迟命令,可能是用户输入吗?

R:在用户定义的Fn中,我可以合并延迟命令,可能是用户输入吗?,r,user-defined-functions,delayed-execution,R,User Defined Functions,Delayed Execution,我正在尝试创建一个用户定义的函数(让我们称之为udf),它将允许我组合几行代码,这样它更简洁,更易于阅读 让我们举一个简单的例子。当我使用tiff函数(或几乎任何输出函数:png,jpeg,…)时,我必须以dev.off()结束它,我想知道我是否可以创建一个函数来执行以下操作: udf <- function(title) {tiff(filename=title) *execute the next line of code in my R script* dev.off()

我正在尝试创建一个用户定义的函数(让我们称之为
udf
),它将允许我组合几行代码,这样它更简洁,更易于阅读

让我们举一个简单的例子。当我使用
tiff
函数(或几乎任何输出函数:
png
jpeg
,…)时,我必须以
dev.off()
结束它,我想知道我是否可以创建一个函数来执行以下操作:

udf <- function(title)
{tiff(filename=title)
   *execute the next line of code in my R script*
   dev.off()
}
从我在网上发现的情况来看,一种解决方案是将“dev.off()”延迟1秒,但这似乎并不有效,而且我相信函数
delay
无论如何都是无效的。 所以我相信有三种选择我正在尝试探索。上面的一个将等待接收下一行代码,然后在
dev.off()
之前执行它,或者:

可能是一个具有可执行参数的函数,即:

udf <- function(title, arg)   # >>>>>>>>>>>    udf("plot.tiff", plot(x))           
{tiff(filename=title)         # >>>>>>>>>>>    That would make it one line!
   *execute(arg)*          
   dev.off()
}
udf>>>>>>>udf(“plot.tiff”,plot(x))
{tiff(filename=title)#>>>>>>>>>那就成一行了!
*执行(arg)*
发展主任()
}
或者可能是执行用户输入提示的一种方式,即:

udf <- function(title)
{tiff(filename=title)
   n <- prompt="Enter a command: "
   *execute(n)*
   dev.off()
}
udf您不能“捕获”后续函数调用,但可以将代码块传递给函数调用。比如说,用一些简单的东西

udf <- function(title, code) {
   cat("start - ", title, "\n")
   code
   cat("end\n")
}

udf("hello", cat("ok\n"))
# start -  hello 
# ok
# end
如果有多个表达式,可以使用大括号

udf("plot.tiff", {
  plot(x)
  plot(y)
} )
udf("plot.tiff", plot(x) )
udf("plot.tiff", {
  plot(x)
  plot(y)
} )