Из вашего вопроса не совсем понятно, если вы действительно хотите использовать список или вектор; Кроме того, я бы избегал именования переменных так же, как имена функций, такие как 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)