R Преобразовать список в матрицу - PullRequest
0 голосов
/ 09 ноября 2018

Я пытаюсь создать матрицу из списка символов следующим образом:

list <- list("0010","0110","1000")

Я хотел бы преобразовать это в матрицу с 4 столбцами (для каждого символа каждого элемента списка) и 3 строками, такими как:

enter image description here

А теперь мне нужно, чтобы числа (0 и 1) распознавались как числа.

Спасибо за вашу помощь!

РЕДАКТИРОВАТЬ с выводом моих данных, теперь я понимаю, почему я получил эту ошибку. Кстати, большое спасибо за ответы. Похоже, что при использовании функции сканирования он также добавил имя файла в список (я не знаю, как это исправить:

first element

second element

1 Ответ

0 голосов
/ 09 ноября 2018

Из вашего вопроса не совсем понятно, если вы действительно хотите использовать список или вектор; Кроме того, я бы избегал именования переменных так же, как имена функций, такие как list. Вот как вы можете решить:

# Try it with l as a list
l <- list("0010","0110","1000")
t(sapply(l, function(x) as.numeric(unlist(strsplit(x, '')))))
#>      [,1] [,2] [,3] [,4]
#> [1,]    0    0    1    0
#> [2,]    0    1    1    0
#> [3,]    1    0    0    0
# Try it with l as a vector
l <- c("0010","0110","1000")
t(sapply(l, function(x) as.numeric(unlist(strsplit(x, '')))))
#>      [,1] [,2] [,3] [,4]
#> 0010    0    0    1    0
#> 0110    0    1    1    0
#> 1000    1    0    0    0

Создано в 2018-11-09 пакетом представ. (v0.2.1)

Объяснение

sapply(x, fun) применяет функцию fun к каждому элементу x. Таким образом,

sapply(l, function(x) as.numeric(unlist(strsplit(x, ''))))

берет каждый элемент l, использует strsplit(x, ''), чтобы получить каждый отдельный символ из этого элемента (каждый "0" или "1"), тогда мы должны unlist(), потому что strsplit() возвращает список, перенос в as.numeric(), так как вам нужны числа, и мы должны обернуть все это в t(), поскольку, когда sapply() возвращает матрицу, она делает это по столбцу.

Обновление

Из вашего обновленного вопроса видно, что ваши элементы списка вообще не имеют символьной формы. В этом случае я бы следовал совету удаленного ответа и использовал Reduce() и rbind()

l <- list('digist/test_digits/0_0.txt' = c(0, 0, 1, 0),
          'digist/test_digits/0_1.txt' = c(0, 1, 1, 0),
          'digist/test_digits/1_1.txt' = c(1, 0, 0, 0))
l
#> $`digist/test_digits/0_0.txt`
#> [1] 0 0 1 0
#> 
#> $`digist/test_digits/0_1.txt`
#> [1] 0 1 1 0
#> 
#> $`digist/test_digits/1_1.txt`
#> [1] 1 0 0 0
Reduce('rbind', l)
#>      [,1] [,2] [,3] [,4]
#> init    0    0    1    0
#>         0    1    1    0
#>         1    0    0    0

Создано в 2018-11-09 пакетом Представить (v0.2.1)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...