วิธีดำเนินการขั้นตอนการรวมบนเวกเตอร์ โดยฉันมีเวกเตอร์ดั้งเดิมเป็นแถวแรก

ผมมีเวกเตอร์นี้

 b=c(5,8,9)

ฉันต้องการทำการรวมกันโดยเลือก 2 รายการในแต่ละครั้ง โดยที่ฉันมีองค์ประกอบดั้งเดิมของ b เป็นแถวแรกที่จะได้รับ

        [,1] [,2] [,3]
[1,]    5     8    9
[2,]    8     9    5

ฉันลอง combn(b, 2) แล้วมันก็ให้สิ่งนี้มา

        [,1] [,2] [,3]
[1,]    5     5    8
[2,]    8     9    9

ฉันสามารถรับความช่วยเหลือเพื่อให้บรรลุผลตามที่ต้องการได้หรือไม่?


person user3327637    schedule 11.10.2018    source แหล่งที่มา
comment
สิ่งเหล่านี้เป็นการเรียงสับเปลี่ยนเป็นเรื่องสำคัญ สิ่งที่คุณสังเกตเห็นด้วย combn(b, 2) คือชุดค่าผสมทั้งหมดของ b เลือก 2 ซึ่งบังเอิญมีชุดค่าผสมดังกล่าวอยู่ 3 ชุด: (5, 8), (5, 9), (8, 9) ผลลัพธ์เป็นเมทริกซ์แบบคอลัมน์   -  person Joseph Wood    schedule 11.10.2018
comment
แล้วนี่คือ R เหรอ? หากเป็นเช่นนั้น คุณควรเพิ่มแท็ก r   -  person Joseph Wood    schedule 12.10.2018
comment
มันไม่ชัดเจนว่าคุณกำลังถามอะไร หากคุณต้องการให้แถวแรกเป็นค่าดั้งเดิม คุณจะไม่ต้องการเลือกรายการ 2 จริงๆ แต่คุณต้องการใช้ค่าแรก จากนั้นเลือก (ตัวอย่าง) 1 i> ของอีกสองค่าที่เหลือ? ดังนั้นเมทริกซ์ของคุณควรมีแถวแรกเป็น 5, 8, 9 และแถวที่สองเป็น (8 หรือ 9), (5 หรือ 9), (5 หรือ 8)?   -  person Tyler    schedule 12.10.2018
comment
ใช่ คุณพูดถูกไทเลอร์ ฉันต้องการเอาต์พุตของฉันเป็นแผนที่ (5 8 9) ไปยัง ( 8 9 5 ) หรือ (5 8 9 ) ไปยัง ( 9 5 8)   -  person user3327637    schedule 13.10.2018


คำตอบ (1)


เนื่องจากแถวที่สองของผลลัพธ์ที่คุณต้องการไม่ได้ถูกกำหนดไว้โดยเฉพาะ คุณจึงไม่จำเป็นต้องมีเครื่องมือที่ซับซ้อนใดๆ:

b <- 1:10
rbind(b, c(b[-1], b[1]))
#   [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
# b    1    2    3    4    5    6    7    8    9    10
#      2    3    4    5    6    7    8    9   10     1

ในกรณีนี้ ฉันเพียง "เลื่อน" b ไปหนึ่งตำแหน่งในแถวที่สอง ซึ่งส่งผลให้เกิดการเรียงสับเปลี่ยนจริงๆ ฉันสมมติว่าองค์ประกอบของ b จะไม่เกิดซ้ำ

person Julius Vainora    schedule 06.11.2018
comment
@ user3327637 มันตอบคำถามของคุณหรือไม่? - person Julius Vainora; 17.11.2018