【发布时间】:2012-05-13 20:34:10
【问题描述】:
我有一个输出 TRUE 或 FALSE 的 R 脚本。在 R 中,它使用真正的 T/F 数据类型,但是当我将其返回值回显到 bash 时,它似乎是一个字符串,说:
"[1] TRUE"
或
"[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)
【问题讨论】:
-
仅供参考,[1] 告诉您这是向量的第一个元素。如果您打印一个包含多个元素的向量,使得打印输出延伸超过一行,R 将打印 [11]、[21]、[31] 等,以便您知道(例如)它打印的 10每行的值。如果您打印一个矩阵,它会将行和列标记为 [,1] 和 [1,]。
-
除了下面给出的好的解决方案之外,我相信你可以在Rscript中使用q(status = val)来表示从Rscript返回给shell的是什么值。但是,如果您正在与协作者一起工作,请注意这一点——返回值通常用于对错误消息进行编码,因此它们可能会将非零返回值作为值得担心的事情,而不仅仅是一个简单的答案。