r - R:在用户定义的 Fn 中,我可以合并延迟命令,可能带有用户输入吗?
问题描述
我正在尝试创建一个用户定义的函数(让我们称之为udf
),它将允许我组合几行代码,使其更简洁且更易于阅读。
让我们举一个简单的例子。当我使用该tiff
函数(或几乎任何输出函数:png
, jpeg
,...)时,我必须以 结束它dev.off()
,我想知道是否可以创建一个函数来执行以下操作:
udf <- function(title)
{tiff(filename=title)
*execute the next line of code in my R script*
dev.off()
}
所以我可以把3行代码变成2行,即:
tiff("plot.tiff") # >>>>>>>>>>> udf("plot.tiff")
plot(x) # >>>>>>>>>>> plot(x)
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 <- function(title)
{tiff(filename=title)
n <- prompt="Enter a command: "
*execute(n)*
dev.off()
}
甚至可能还有另一种我想不出的选择,但网络上似乎没有出现任何内容,也许有一个关键词我没有在搜索中使用,但任何帮助将不胜感激。谢谢!
最好的,@UpAndComing
解决方案
您不能“捕获”后续函数调用,但可以将代码块传递给函数调用。例如,用一些简单的东西
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) )
如果您有多个表达式,则可以使用大括号。
udf("plot.tiff", {
plot(x)
plot(y)
} )
推荐阅读
- php - 刷新时PHP重置页面
- regex - 如何使用熊猫拆分数据框?
- windows - 如何在 Windows 7 32 位上安装 MongoDB?
- git - 从 Github API 推送事件中获取 PR 编号
- ruby-on-rails - “表单中的第一个参数不能包含 nil 或为空”Ruby on Rails
- android - MediaController 控件在 Dialog Activity 或 Alert Dialog 中播放视频时卡住
- python - 加载预训练模型 pytorch - dict 对象没有属性 eval
- sas - 如何在 Excel 中将 Proc Freq 输出拆分为多列?
- php - 在 Laravel 中没有使用 latest() 获取最新记录
- .htaccess - 如何使用根文件夹中的默认语言文件和子文件夹中的另一种语言为静态 html 多语言网站设置 htaccess?