วิธีการซ่อมแซมใน 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) ต้องมีความยาวเป็นค่าบวก
วิธีแก้ไข: ข้อผิดพลาดในการเลือกอาร์กิวเมนต์ที่ไม่ได้ใช้