我有一个输出TRUE或FALSE的R脚本.在R中,它使用了真正的T / F数据类型,但当我将其返回值回显为bash时,它似乎是一个字符串,说:
“[1]为真”
要么
“[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 ];
比
if [ "$A" == "[1] TRUE" ];
这是可能的,或者我应该对此感到满意,它是如何的,哪个有效?
*更新*
这是产生这个的Rscript的最小化版本……
myinput <- TRUE #or FALSE FunctionName <- function(test){ if (test == TRUE){ val <- TRUE } else { val <- FALSE } return(val) } FunctionName(myinput)
在向R解释器提供对象名称时,不应使用print()或隐式print() – 你应该使用cat(),它不会在TRUE前面加上“[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)