Используйте lapply для объединения элементов списка - PullRequest
0 голосов
/ 20 мая 2018

Проблема следует ниже.Сначала рабочий пример:

library(stringr)
library(rebus)

phone_numbers_mat <- structure(c("555-555-0191", NA, "555) 555 0191", "555.555.0191", 
"555", NA, "555", "555", "555", NA, "555", "555", "0191", NA, 
"0191", "0191"), .Dim = c(4L, 4L)

Следующий код восстанавливает телефонные номера из вышеприведенной матрицы:

str_c(
  "(",
  phone_numbers_mat[,2],
  ")",
  " ",
  phone_numbers_mat[,3],
  "-",
  phone_numbers_mat[,4] )

И возвращает этот результат:

[1] "(555) 555-0191" NA               "(555) 555-0191" "(555) 555-0191"

Но когда я пытаюсь выполнить аналогичную операцию со структурой списка, я получаю сообщение об ошибке "Ошибка: неверное число измерений" .

phone_numbers_list <- list(structure(c("555-555-0191", "555", "555", "0191"), .Dim = c(1L, 
4L)), structure(character(0), .Dim = c(0L, 4L)), structure(c("555) 555 0191", 
"555", "555", "0191"), .Dim = c(1L, 4L)), structure(c("555.555.0191", 
"555.555.0192", "555", "555", "555", "555", "0191", "0192"), .Dim = c(2L, 
4L)))

Моя попытка (возвращается ошибка выше):

lapply( phone_numbers_list,
str_c(
  "(",
  phone_numbers[,2],
  ")",
  " ",
  phone_numbers[,3],
  "-",
  phone_numbers[,4])
  )

Как правильно обработать список для восстановления телефонных номеров?

1 Ответ

0 голосов
/ 20 мая 2018

Нам нужен анонимный вызов функции

lapply(phone_numbers_list, function(phone_numbers) str_c(
   "(",
   phone_numbers[,2],
    ")",
    " ",
   phone_numbers[,3],
    "-",
   phone_numbers[,4])
  )
#[[1]]
#[1] "(555) 555-0191"

#[[2]]
#[1] "() -"

#[[3]]
#[1] "(555) 555-0191"

#[[4]]
#[1] "(555) 555-0191" "(555) 555-0192"
...