gpt4 book ai didi

r - 停止脚本,直到从 R 中的键盘输入值

转载 作者:行者123 更新时间:2023-12-01 09:37:14 25 4
gpt4 key购买 nike

我有一个脚本,我想用键盘输入启动它,然后根据在这个变量中输入的值继续工作,我试过 y=readline("please enter a value") 但是脚本不会等待输入一个值,它只是显示这句话并继续,这怎么能做到???先谢谢了??

最佳答案

这是一个非常简单的 #! 脚本,它创建了一个函数 foo(),其唯一目的是回显它的参数 'bar'.

#! /home/gavin/R/2.13-patched/build/bin/Rscript --vanilla
foo <- function(bar) {
writeLines(paste("You supplied the following information:", bar))
}

## grab command arguments passed as -args
args <- commandArgs(TRUE)

## run foo
foo(args)

我们使用 commandArgs() 函数从 shell 中获取任何传递给脚本的命令行参数,然后将它们传递给 foo(),最后一行脚本。

如果我们在文件 foobar.R 中有那段代码,那么我们可以传入一个参数并使用 Rscript 接口(interface)运行脚本。您还需要使上述可执行文件(chmod it)。

然后脚本可以调用如下:

[gavin@desktop ~]$ ./foobar.R Cl
You supplied the following information: Cl

但请注意 ?Rscript 中的信息,因为不幸的是,标准 Windows cmd shell 不知道 #! 之类的脚本,因此您可能需要安装其他一些shell(帮助建议 Cygwin shell 应该可以工作)来使用我展示的功能。

更新:使用 source()readline()

如果您无需以非交互方式运行(即您不需要打开 R GUI 并运行一行代码),另一种选择是只需 source()脚本。例如,如果这是在脚本调用 barfoo.R:

dynamicwilcox <- function() {
ANSWER <- readline("What column do you want to work on? ")
if(ANSWER=="Ph") {
writeLines("column was 'Ph'")
} else if(ANSWER=="Cl") {
writeLines("column was 'Cl'")
} else {
writeLines(paste("Sorry, we don't know what to do with column", ANSWER))
}
ANSWER ## return something
}

dynamicwilcox()

然后在 R Gui 提示符下,我们可以这样做:

R> source("barfoo.R")
What column do you want to work on? Cl
column was 'Cl'

或者如果您不想指定完整路径,请执行以下操作:

R> source(file.choose())

readline() 在交互式 R session 中使用时效果很好,并且确实是完成这项工作的最佳工具 - 这正是它的设计目标。

您希望以批处理模式运行脚本但提供一些输入的整个前提没有多大意义。 R 期望脚本在批处理模式下运行时是自包含的。您可能没有意识到,但是当您双击脚本时,它正在以批处理模式运行。

关于r - 停止脚本,直到从 R 中的键盘输入值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5507691/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com