อันที่สั้นกว่านั้นคือ vectorized ซึ่งหมายความว่าพวกมันสามารถคืนค่าเวกเตอร์ได้ดังนี้:
((-2:2) >= 0) & ((-2:2) <= 0)
# [1] FALSE FALSE TRUE FALSE FALSE
แบบฟอร์มที่ยาวกว่าจะประเมินจากซ้ายไปขวาเป็นการตรวจสอบเฉพาะองค์ประกอบแรกของแต่ละเวกเตอร์เท่านั้นดังนั้นสิ่งที่กล่าวมาข้างต้นจะให้
((-2:2) >= 0) && ((-2:2) <= 0)
# [1] FALSE
ตามที่หน้าความช่วยเหลือบอกว่าสิ่งนี้จะทำให้ฟอร์มยาวขึ้น "เหมาะสำหรับการเขียนโปรแกรมควบคุมโฟลว์และโดยทั่วไปแล้ว [ต้องการ] ในกรณีที่คำสั่ง"
คุณต้องการใช้รูปแบบยาวเฉพาะเมื่อคุณแน่ใจว่าเวกเตอร์นั้นยาวเท่ากัน
คุณควรจะอย่างบางเวกเตอร์ของคุณเป็นเพียงระยะเวลา 1 เช่นในกรณีที่พวกเขาจะมีฟังก์ชั่นว่าการกลับมามีความยาวเพียง 1 booleans คุณต้องการใช้แบบฟอร์มสั้น ๆ หากเวกเตอร์มีความยาวได้> 1 ดังนั้นหากคุณไม่แน่ใจจริงๆคุณก็ควรจะตรวจสอบก่อนหรือใช้แบบฟอร์มสั้น ๆ แล้วใช้all
และเพื่อลดความมันให้มีความยาวหนึ่งสำหรับการใช้งานในงบการควบคุมการไหลเช่นany
if
ฟังก์ชันall
และany
มักใช้กับผลลัพธ์ของการเปรียบเทียบแบบเวกเตอร์เพื่อดูว่าการเปรียบเทียบทั้งหมดหรือใด ๆ เป็นจริงตามลำดับ ผลลัพธ์จากฟังก์ชั่นเหล่านี้จะต้องมีความยาว 1 ดังนั้นจึงเหมาะสำหรับใช้ในกรณีที่คำสั่งในขณะที่ผลลัพธ์จากการเปรียบเทียบแบบเวกเตอร์ไม่ได้ ifelse
(แม้ว่าผลลัพธ์เหล่านั้นจะมีความเหมาะสมสำหรับการใช้งานใน
หนึ่งความแตกต่างสุดท้าย: &&
และ||
เพียงประเมินเท่าเทอมที่พวกเขาต้องการ (ซึ่งดูเหมือนจะเป็นสิ่งที่มีความหมายโดยการลัดวงจร) ยกตัวอย่างเช่นที่นี่คือการเปรียบเทียบการใช้ค่าที่ไม่ได้กำหนดa
; ถ้ามันไม่ลัดวงจรเป็น&
และ|
ไม่มันจะให้ข้อผิดพลาด
a
# Error: object 'a' not found
TRUE || a
# [1] TRUE
FALSE && a
# [1] FALSE
TRUE | a
# Error: object 'a' not found
FALSE & a
# Error: object 'a' not found
สุดท้ายดูหัวข้อ 8.2.17 ในThe R Infernoหัวข้อ "and and andand"