[英]R Convert list to matrix
从您的问题来看,您实际上是要使用列表还是向量还不是很清楚; 另外,我会避免将变量命名为与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
由reprex 包(v0.2.1) 于 2018 年 11 月 9 日创建
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
由reprex 包(v0.2.1) 于 2018 年 11 月 9 日创建
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.