lapply не является чисто картографической функцией (или это строковая проблема)? - PullRequest
1 голос
/ 01 марта 2020

Я использую R 3.5.2.

Когда я читал документацию, я ожидал

lapply(c(a,b),f) == c(f(a),f(b))

Но я получаю ...

f = function(x) x

b = c("1","0","0")

lapply(b,f)

[[1]]
[1] "1"

[[2]]
[1] "0"

[[3]]
[1] "0"

В то время как я также получаю

c(f("1"),f("0"),f("0"))
[1] "1" "0" "0"e

Я попытался использовать Sapply и у меня возникла другая проблема ...

sapply(c("1","0","0"),f)

 1   0   0 
"1" "0" "0" 

Но Sapply работает в списке чисел c ...

sapply(c(1,0,0),f)
[1] 1 0 0

Итак, как мне получить c (f (a), f (b)), в общем?

1 Ответ

1 голос
/ 01 марта 2020

Аргумент USE.NAMES в sapply по умолчанию равен TRUE. Это может быть установлено в FALSE

sapply(c("1","0","0"),f, USE.NAMES = FALSE)
#[1] "1" "0" "0"

Или другие параметры переносятся с unname или as.vector или unlist, поскольку все эти атрибуты удаляются из атрибута. Вывод sapply в сообщении OP - это named vector, т.е. он включает имя в качестве атрибутов. Оборачивая unname, as.vector, он удаляет атрибут

unname(sapply(c("1", "0", "0"), f))
#[1] "1" "0" "0"
...