Tôi có một tập lệnh R xuất ra TRUE hoặc FALSE. Trong R, nó sử dụng một bona fide T/F kiểu dữ liệu, nhưng khi tôi vang giá trị trả về của nó để bash, nó có vẻ là một chuỗi, nói:Xuất một boolean từ một Rscript vào biến Bash
"[1] TRUE"
hoặc
"[1] FALSE"
Cả hai đều đứng trước [1]. Không phải là [0], đó không phải là lỗi đánh máy. Dù sao, kết quả của việc này là khi tôi thử kiểm tra đầu ra của bản Rscript này để chạy tập lệnh tiếp theo, tôi phải so sánh chuỗi với "[1] TRUE" như dưới đây, thay vì so sánh với "TRUE" hoặc " 1 "cảm thấy sạch hơn và tốt hơn.
A=$(Rscript ~/MyR.r)
echo $A
if [ "$A" == "[1] TRUE" ]; then
bash SecondScript.sh
fi
Làm cách nào để R tạo đầu ra đúng Boolean hoặc Bash chấp nhận chuỗi đầu ra và chuyển đổi thành 0/1 để so sánh? Đó là, tôi muốn thử nghiệm cho ...
if [ $A == TRUE ];
hơn
if [ "$A" == "[1] TRUE" ];
Có phải đó là có thể, hay tôi nên được hạnh phúc với điều này, làm thế nào nó là, mà làm việc?
* CẬP NHẬT *
Dưới đây là phiên bản minimalized của Rscript mà tạo ra này ...
myinput <- TRUE #or FALSE
FunctionName <- function(test){
if (test == TRUE){
val <- TRUE
} else {
val <- FALSE
}
return(val)
}
FunctionName(myinput)
FYI, [1] là nói bạn đây là phần tử đầu tiên của vectơ. Nếu bạn in một vectơ có nhiều phần tử trong đó sao cho bản in mở rộng trên nhiều hàng, R sẽ giúp in [11], [21], [31] vv để bạn biết (ví dụ) bản in của nó 10 giá trị mỗi hàng. Nếu bạn in một ma trận nó nhãn các hàng và cột là [, 1] và [1,] cho bạn. – Spacedman
Ngoài các giải pháp tốt được đưa ra dưới đây, tôi tin rằng bạn có thể sử dụng q (status = val) trong Rscript để nói giá trị nào được trả về shell từ Rscript. Hãy cẩn thận về điều này mặc dù nếu bạn đang làm việc với cộng tác viên - giá trị trả về thường được sử dụng để mã hóa thông báo lỗi để chúng có thể lấy giá trị trả về khác không đáng lo ngại thay vì chỉ chạy câu trả lời của nhà máy. – mweylandt