Subsetting vector (including lists) returns the same number of elements as the subsetting vector, including unmatched elements which are reported as `NA` or `NULL` (in case of lists).

Consider:

```
menu = list(
  "bacon" = "foo",
  "eggs" = "bar",
  "beans" = "baz"
  )

select = c("bacon", "eggs", "spam")

menu[select]
# $bacon
# [1] "foo"
#
# $eggs
# [1] "bar"
#
# $<NA>
# NULL

```

Wouldn't it be more logical to return named vector/list including names of unmatched elements when subsetting using names? After all, the unmatched elements are already returned. I.e., the output would look like this:

```

menu[select]
# $bacon
# [1] "foo"
#
# $eggs
# [1] "bar"
#
# $spam
# NULL

```

The simple fix `menu[select] |> setNames(select)` solves, but it feels to me like something that could be a default behaviour.

On slightly unrelated note, when I was asking if there is a better solution, the `menu[select]` seems to allocate more memory than `menu_env = list2env(menu); mget(select, envir = menu, ifnotfound = list(NULL)`. Or the sapply solution. Is this a benchmarking artifact?

https://stackoverflow.com/q/77828678/4868692

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to