我有2个文件: 1. sub file:get_input_template.R:该文件包含从用户那里获取输入的函数。
####################################
fun <- function(){
x <- readline("What is the value of x?")
x <- as.numeric(unlist(strsplit(x, ",")))
return(x)
}
####################################
这是我的计划:
####################################
source("get_input_template.R")
n<-fun()
sprintf("input value n = %s",n)
####################################
问题是,当我完全运行我的主程序时,它会显示一个错误,因为它不会在第二行n&lt; -fun()停止,以便用户输入值。因此,我收到了一个错误:
---------------------------
Warning message:
In fun() : NAs introduced by coercion
---------------------------
如何说R停止在第2行运行,并允许用户输入数据,然后将该输入打印到控制台。我知道我可以通过将sprintf(“输入值n =%s”,n)移动到子文件中来修复它,但是,这不是我想要的方式。如果我希望仅在主文件中保留该行代码,我该怎么办?
提前致谢。
答案 0 :(得分:1)
这是由R
解析和解释你的代码的方式引起的,使其更简单,发生的事情是相同的
> source("get_input_template.R") # you run this
> n<-fun() # then this
What is the value of x? # this appears and instead of giving the value you run
sprintf("input value n = %s",n) # you run this final line
如果在print(x)
之后添加readline
,您可以看到此
> source("UI/read console.R")
> n<-fun()
What is the value of x? sprintf("input value n = %s",n) # at this point R pauses and it is provided with "sprintf("input value n = %s",n)" as value of x
[1] "sprintf(\"input value n = %s\",n)"
Warning message:
In fun() : NAs introduced by coercion
您可以通过将代码包装在函数中来解决此问题
f <- function(){
source("UI/read console.R")
n<-fun()
sprintf("input value n = %s",n)
}
然后运行:
f()
它产生不同的原因是运行一堆行R
逐个执行它们,只要一个语句完成以下运行(并且在您的问题中,第三行作为输入提供)第二 :) )。在一个不会发生的函数中,其中的所有代码都是一个语句(函数本身)的一部分,因此,当R要求您键入内容时,以下行不会被执行。