Tôi chỉ phát hiện các hành vi sau đây của is.na()
chức năng mà tôi không hiểu:Tại sao is.na() thay đổi đối số của nó?
df <- data.frame(a = 5:1, b = "text")
df
## a b
## 1 5 text
## 2 4 text
## 3 3 text
## 4 2 text
## 5 1 text
is.na(df)
## a b
## [1,] FALSE FALSE
## [2,] FALSE FALSE
## [3,] FALSE FALSE
## [4,] FALSE FALSE
## [5,] FALSE FALSE
is.na(df) <- "0"
df
## a b 0
## 1 5 text NA
## 2 4 text NA
## 3 3 text NA
## 4 2 text NA
## 5 1 text NA
Câu hỏi của tôi
Tại sao is.na()
thay đổi đối số của nó (và trong trường hợp này cho biết thêm một cột bổ sung cho các dữ liệu khung)? Trong trường hợp này, hành vi của nó có vẻ khó hiểu hơn (hoặc ít nhất là bất ngờ) vì kết quả của truy vấn là FALSE
cho tất cả các trường hợp.
NB
Câu hỏi này không phải là về Subsetting và thay đổi NA
giá trị trong một khung dữ liệu - Tôi biết làm thế nào để làm điều đó (df[is.na(df)] <- "0"
). Câu hỏi này là về hành vi của hàm is.na
! Tại sao việc gán cho hàm is.something
thay đổi chính đối số - điều này là bất ngờ.
Bạn cần phải sử dụng các biến hợp lý đó làm tham chiếu chỉ mục, nghĩa là 'df [is.na (df)] <- 0' – Sotos
@Sotos: Vui lòng xem nhận xét của tôi. – vonjd
@ vonjd Tôi thấy nhận xét của bạn, nhưng quan điểm của tôi là nhiệm vụ của bạn không hoạt động ngay cả khi có các giá trị NA, tức là 'df $ a [3] <- NA; is.na (df) <- "0" ' – akrun