r - 以编程方式关闭由 `View(x)` 创建的窗口

标签 r

我正在使用 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/

相关文章:

r - ggplot2 中 `geom_label` 的 y 值基于 `..count..` 变量

r - 为什么 rapply 和 lapply 处理 NULL 的方式不同?

r - 使用 dplyr 从 SQL 语句创建表

r - 当列名包含空格时 dplyr::mutate_if 失败

r - 如何使用kable将表格调整为pdf页面?

r - 合并 2 个数据框并平均分配非连接列中的行

r - 在 R 中绘制对数正态概率密度

r - R 无法识别的字符串值

java - R和Hive连接-RJDBC + RHive

R - 重复执行脚本