Tôi gặp phải một hành vi lạ trong R với chức năng sapply()
. Hàm này được cho là trả về một vectơ, nhưng trong trường hợp đặc biệt, nơi bạn cho nó một vectơ trống, nó trả về một danh sách.Tại sao sapply() trả lại một danh sách?
hành vi đúng với một vector:
a = c("A", "B", "C")
a[a == "B"] # Returns "B"
a[sapply(a, function(x) {x == "B"})] # Returns "B"
hành vi đúng với giá trị NULL:
a = NULL
a[a == "B"] # Returns NULL
a[sapply(a, function(x) {x == "B"})] # Returns NULL
hành vi kỳ lạ với một vector rỗng:
a = vector()
a[a == "B"] # Returns NULL
a[sapply(a, function(x) {x == "B"})] # Erreur : type 'list' d'indice incorrect
Cùng thông báo lỗi như với tuyên bố này:
a[list()] # Erreur dans a[list()] : type 'list' d'indice incorrect
Tại sao? Nó là một lỗi?
Do hành vi lạ này, tôi sử dụng unlist(lapply())
.
Protip- nó không bao giờ là lỗi –
@ChrisBeeley - Không bao giờ là lỗi, luôn luôn là "tính năng" ;-) R (và S) có một loạt các tính năng "ít" lý tưởng mặc dù, và đây là một trong số chúng . '1: 0' là một ... – Tommy