Вывод символов в vapply - PullRequest
       44

Вывод символов в vapply

0 голосов
/ 27 января 2020

Я использую vapply для получения вектора символов, например:

vapply(X = 1:16,
       FUN = function(X) {paste0("status", X)}, 
       FUN.VALUE = character(1))

#>  [1] "status1"  "status2"  "status3"  "status4"  "status5"  "status6" 
#>  [7] "status7"  "status8"  "status9"  "status10" "status11" "status12"
#> [13] "status13" "status14" "status15" "status16"

Вывод включен.

Скажем, что вместо возврата символьных переменных я хочу вернуть символы (или имена объектов), используя sym(), например:

rlang::sym("status1")
#> status1

Но что, если я хочу вернуть символ как vapply выход? Мне нужно указать тип выходного значения с аргументом FUN.VALUE = ..., но я не смог найти хороший пример того, как я это сделаю, и мои попытки с различными вариантами FUN. VALUE = symbol(1) или FUN.VALUE = name(1) потерпели неудачу.

Желаемый результат будет выглядеть примерно так:

[1] status1  status2  status3  status4  status5  status6 

1 Ответ

1 голос
/ 27 января 2020

Мы можем использовать lapply, можем преобразовать в символ с as.symbol

lapply(X = 1:16,
   FUN = function(X) {as.symbol(paste0("status", X))})

Обратите внимание, что symbol может иметь только vector длины 1. Итак, если мы используем vapply , который возвращает вектор, он должен быть заключен в list

vapply(1:5, function(x) list(as.symbol(paste0("status", x))), FUN.VALUE = list(1))
#[[1]]
#status1

#[[2]]
#status2

#[[3]]
#status3

#[[4]]
#status4

#[[5]]
#status5

Согласно ?name

Для is.name и is.symbol , логический вектор длины один со значением ИСТИНА или ЛОЖЬ.

...