Pertimbangkan out<-setNames(sample(26,replace = T),letters). Dengan konstruksi, salah satu elemen output harus dinamai a. Namun, ketika saya mencoba Filter(function(x) names(x)=="a",out), saya mendapatkan numerik bernama ukuran 0. Mengapa ini terjadi?

1
J. Mini 4 April 2021, 23:16

2 jawaban

Jawaban Terbaik

Fungsi Filter kehilangan informasi penamaan dari vektor (karena menggunakan lapply secara internal pada out yang juga kehilangan informasi ini).

Namun, Anda dapat memfilter nama menggunakan: out[names(out) == "a"]. Hasilnya adalah vektor yang berisi 6 dengan nama a.

2
Jérôme Richard 4 April 2021, 20:39

Ini tampaknya menjadi bug di Filter. Atau, setidaknya, perilaku tidak berdokumen. Argumen fungsi x bukan bilangan bulat bernama, atribut names dilucuti:

Filter(function(x) {
  print(names(x))
  names(x) == "a"
}, out)
#NULL
#NULL
#NULL
#NULL
# (... a total of 26 NULL's...)
#NULL
#NULL
#NULL
#NULL
#named integer(0)
0
Rui Barradas 4 April 2021, 20:42