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)
} )