我正在使用 View
查看 R 中的数据帧:
my_df <- data.frame(a=1:10, b=letters[1:10])
View(my_df)
我现在想以编程方式关闭生成的窗口(而不是单击 X 按钮)。
我该怎么做? graphics.off
不起作用,因为它不是图形设备。查看 View
代码,内部函数 dataviewer
用于显示窗口,但我不确定它在后台使用什么(tcltk?),所以我不确定如何关闭窗口。
关于我为什么想要这个的一些评论。
我基本上是在脚本中执行用户检查步骤,询问用户数据帧的片段和相应的图像是否在一起。事情是这样的:
for (i in 1:heaps) {
1. View(a snippet of a big dataframe)
2. show an image
3. readline('Is this OK? [Y/N]: ') (store the i for which it's not OK)
4. close the image window (graphics.off()), close the View(..) window.
}
我基本上想减少用户盯着图像和数据帧片段并输入 Y 或 N 的交互,这样他们就不必为循环中的每个 i
手动关闭数据帧窗口.
(我自己正在完成此验证,正在处理 200 个 View(snippet)
窗口,我没有费心关闭 D:。此外,还注意到打开Windows 窃取了键盘焦点,使其远离提示,因此我输入 Y/N 的速度没有我想要的那么快。但我只需要执行一次,所以现在就可以了。我很好奇答案不过这个问题留待下次)。
最佳答案
完成您所追求的任务的一种方法是使用system
函数。例如,您可以确定窗口 ID/名称,然后发出关闭命令,如下所示:
system('(sleep 10; wmctrl -c "Data: my_df") &')
上述命令将等待 10 秒,然后向窗口管理器发出命令,关闭任何名为 “Data: my_df” 的窗口。这 2 个命令包含在括号中。这在 bash 中称为复合命令。整个复合命令以“&”为背景。
我测试了以下内容并且有效:
# sample1.R
my_df <- data.frame(a=1:10, b=letters[1:10])
system('(sleep 10; wmctrl -c "Data: my_df") &')
View(my_df)
实现此目的的另一种方法如下:
# sample2.R
my_df <- data.frame(a=1:10, b=letters[1:10])
View(my_df)
system('read -p "Press [Enter] key to start backup..."')
my_df2 <- data.frame(a=1:10, b=letters[1:10])
View(my_df2)
system('read -p "Press [Enter] key to start backup..."')
我正在这样运行:
R CMD BATCH sample2.R
注意:来自 read -p
命令的提示未显示在我的终端中,但您可以在 R 中打印重复的提示消息。
关于r - 以编程方式关闭由 `View(x)` 创建的窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14349868/