Как преобразовать несколько символов в векторы в R? - PullRequest
0 голосов
/ 05 декабря 2018

Я пытаюсь преобразовать несколько символов в векторы и сделать их списком в R.

Правило преобразования следующее:

  1. Назначьте число каждому символу.ех.A = 1, B = 2, C = 3, ...
  2. Сделать вектор, когда длина символов равна "> = 2".ех.AB = c (1,2), ABC = c (1,2,3)
  3. Создание списков, содержащих несколько векторов.

Например, предположим, что есть exобъект с тремя компонентами.Для каждого компонента я хочу сделать список объектов list1, list2 и list3.

ex = c("(A,B,C,D)", "(AB,BC,CD)","(AB,C)")

# 3 lists to be returned from ex object
list1 = "list(1,2,3,4)"                # from (A,B,C,D)
list2 = "list(c(1,2), c(2,3), c(3,4))" # from (AB,BC,CD)
list3 = "list(c(1,2), c(3))"           # from (AB,C)

Пожалуйста, дайте мне знать хорошую функцию R для решения приведенного выше примера.* Незначительное изменение отражено.

1 Ответ

0 голосов
/ 05 декабря 2018
lookUpTable = as.numeric(1:4)        #map numbers to their respective strings
names(lookUpTable) = LETTERS[1:4]

step1<-                              #get rid of parentheses and split by ",".
strsplit(gsub("[()]", "", ex), ",")

result<-                             #split again to make things like "AB" into "A", "B", also convert the strings to numbers acc. to lookUpTable
lapply(step1, function(x){ lapply(strsplit(x, ""), function(u) unname(lookUpTable[u])) })

# assign to the global environment.
invisible(
lapply(seq_along(result), function(x) {assign(paste0("list", x), result[[x]], envir = globalenv()); NULL})
)

# get it as strings:
invisible(
    lapply(seq_along(result), function(x) {assign(paste0("list_string", x), capture.output(dput(result[[x]])), envir = globalenv()); NULL})
)

данные:

ex = c("(A,B,C,D)", "(AB,BC,CD)","(AB,C)")

Советы и рекомендации:

  • Я использую регулярные выражения в gsubstrsplit).Изучите регулярные выражения!

  • Я сделал lookUpTable, который отображает отдельные строки в числа.Убедитесь, что ваш lookUpTable настроен аналогично.

  • Посмотрите на функции применения, как в этом случае ?lapply.

  • наконец I assign результат для глобальной окружающей среды.Я не рекомендую этот шаг, но это то, что вы просили.

...