วิธีการซ่อมแซมใน r: การเปลี่ยนมีความยาวเป็นศูนย์


ข้อผิดพลาดที่คุณอาจพบใน R คือ:

 Error in x[1] = x[0]: replacement has length zero

ข้อผิดพลาดนี้เกิดขึ้นเมื่อคุณพยายามแทนที่ค่าในเวกเตอร์ด้วยค่าอื่นที่ “มีความยาวเป็นศูนย์” ซึ่งหมายความว่าไม่มีอยู่จริง

บทช่วยสอนนี้จะอธิบายวิธีแก้ไขข้อผิดพลาดนี้อย่างชัดเจน

วิธีการทำซ้ำข้อผิดพลาด

สมมติว่าเราสร้างเวกเตอร์ต่อไปนี้ด้วยค่า 10 ค่าใน R:

 data = c(1, 4, 5, 5, 7, 9, 12, 14, 15, 17)

ตอนนี้ สมมติว่าเราลองใช้ลูป for() ต่อไปนี้เพื่อคูณแต่ละค่าในเวกเตอร์ด้วยค่าที่อยู่ก่อนหน้า:

 for (i in 1: length (data)) {
  data[i] = data[i] * data[i-1]
}

Error in data[i] <- data[i] * data[i - 1]: replacement has length zero

เราได้รับข้อผิดพลาด ” การแทนที่มีความยาวเป็นศูนย์ ” เนื่องจากในลูปแรกเราพยายามทำการคูณต่อไปนี้:

  • ข้อมูล[1] * ข้อมูล[0]

เนื่องจากดัชนี R เริ่มต้นที่ 1 ค่า data[0] จึงไม่มีอยู่จริง

เราสามารถตรวจสอบสิ่งนี้ได้โดยพยายามพิมพ์ค่าที่ตำแหน่ง 0 ในเวกเตอร์:

 print (data[0])

numeric(0)

ผลลัพธ์ที่ได้คือเวกเตอร์ดิจิทัลที่มีความยาว 0 กล่าวคือ ไม่มีอยู่จริง

วิธีการแก้ไขข้อผิดพลาด

วิธีแก้ไขข้อผิดพลาดนี้คือใช้ลูป for() ที่ไม่ได้พยายามเข้าถึงค่าของเวกเตอร์ที่ไม่มีอยู่

ในตัวอย่างของเรา เราสามารถแก้ไขข้อผิดพลาดนี้ได้โดยเริ่ม for loop ที่ตำแหน่งดัชนี 2 แทนที่จะเป็นตำแหน่ง 1:

 for (i in 2: length (data)) {
  data[i] = data[i] * data[i-1]
}

#view updated vector
data

 [1] 1 4 20 100 700 6300 75600
 [8] 1058400 15876000 269892000

โปรดทราบว่าเราไม่ได้รับข้อผิดพลาดเนื่องจากเราไม่เคยพยายามเข้าถึงตำแหน่งดัชนีในเวกเตอร์ที่ไม่มีอยู่

แหล่งข้อมูลเพิ่มเติม

บทช่วยสอนต่อไปนี้จะอธิบายวิธีแก้ไขข้อผิดพลาดทั่วไปอื่น ๆ ใน R:

วิธีแก้ไข: เงื่อนไขมีความยาว > 1 และระบบจะใช้เฉพาะองค์ประกอบแรกเท่านั้น
วิธีแก้ไข: การแทนที่มีเส้น X ข้อมูลมี Y
วิธีแก้ไข: อาร์กิวเมนต์ที่ไม่ใช่ตัวเลขของตัวดำเนินการไบนารี
วิธีแก้ไข: dim(X) ต้องมีความยาวเป็นค่าบวก
วิธีแก้ไข: ข้อผิดพลาดในการเลือกอาร์กิวเมนต์ที่ไม่ได้ใช้

เพิ่มความคิดเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *