我有一个输出 TRUE 或 FALSE 的 R 脚本。在 R 中,它使用真正的 T/F 数据类型,但是当我将其返回值回显给 bash 时,它似乎是一个字符串,表示:
"[1] TRUE"
or
"[1] FALSE"
它们的前面都有 [1]。 [0] 也不是,这不是拼写错误。无论如何,结果是当我尝试测试此 Rscript 的输出以运行后续脚本时,我必须与“[1] TRUE”进行字符串比较,如下所示,而不是与“TRUE”或“进行比较1" 感觉更干净、更好。
A=$(Rscript ~/MyR.r)
echo $A
if [ "$A" == "[1] TRUE" ]; then
bash SecondScript.sh
fi
如何让 R 输出一个真正的布尔值,或者让 Bash 接受输出字符串并将其转换为 0/1 进行比较?也就是说,我宁愿测试...
if [ $A == TRUE ];
than
if [ "$A" == "[1] TRUE" ];
这可能吗,或者我应该对此感到满意,它是怎样的,它有效吗?
*** 更新 ***
这是生成此内容的 Rscript 的最小化版本...
myinput <- TRUE #or FALSE
FunctionName <- function(test){
if (test == TRUE){
val <- TRUE
} else {
val <- FALSE
}
return(val)
}
FunctionName(myinput)
您应该使用 print() 或将对象名称提供给 R 解释器时发生的隐式 print()-ing,而不是使用cat()
它不会在 TRUE 或 FALSE 前面添加“[1]”。如果你想要 0/1,那么使用cat(as.numeric(.))
。试试这个:
myinput <- TRUE #or FALSE
FunctionName <- function(test){
if (test == TRUE){
val <- TRUE
} else {
val <- FALSE
}
cat(as.numeric(val))
}
FunctionName(myinput)
如果您需要该值进行进一步处理,您也可以使用:
cat(as.numeric(val)); invisible(val)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)