r - 如何从列表的子元素创建矩阵?(在 R 中)
问题描述
简而言之,我有一个由 quanteda 包(LD1)创建的 DFM 列表。每个 DFM 都有不同长度的不同文本。
现在,我想计算和比较 DFM 内和 DFM 之间每个文本的词汇多样性。
lex.div <-lapply(LD1, function(x) {textstat_lexdiv(x,measure = "all")})
这给我留下了一个 S3 类型数据的列表,在每个数据中,都有不同的属性,它们是词汇多样性度量。
lex.div[[1]]$TTR
[1] 0.2940000 0.2285000 0.2110000 0.1912500 0.1802000 0.1671667 0.1531429 0.1483750 0.1392222
[10] 0.1269000
lex.div[[2]]$TTR
[1] 0.3840000 0.2895000 0.2273333 0.2047500 0.1922000 0.1808333 0.1677143 0.1616250 0.1530000
[10] 0.1439000 0.1352727 0.1279167 0.1197692 0.1125000 0.1069333
问题来了。我需要一个矩阵中的所有 TTR 值。我想lex.div[[1]]$TTR
成为矩阵的第一行,lex.div[[2]]$TTR
成为第二行,依此类推。注意lex.div[[1]]$TTR
≠的长度lex.div[[2]]$TTR
。
这是我到目前为止所做的:
m1 <-matrix(lex.div[[1]]$TTR, nrow = 1, ncol = length(lex.div[[1]]$TTR))
m.sup <- if(ncol(m1) < 30) {mat.to.add = matrix(NA, nrow = nrow(m1), ncol = 30 - ncol(m1))}
m1 <-cbind(m1, m.sup)
m2 <-matrix(lex.div[[2]]$TTR, nrow = 1, ncol = length(lex.div[[2]]$TTR))
m.sup <- if(ncol(m2) < 30) {mat.to.add = matrix(NA, nrow = nrow(m2), ncol = 30 - ncol(m2))}
m2 <-cbind(m2, m.sup)
m3 <-matrix(lex.div[[3]]$TTR, nrow = 1, ncol = length(lex.div[[3]]$TTR))
m.sup <- if(ncol(m3) < 30) {mat.to.add = matrix(NA, nrow = nrow(m3), ncol = 30 - ncol(m3))}
m3 <-cbind(m3, m.sup)
...
m.total <-rbind (m1,m2,m3...)
但我不能这样做。你能帮我写一个 for 循环或某事让它更容易和更快地完成吗?
解决方案
你可以试试下面的代码
TTRs <- lapply(lex.div, `[[`, "TTR")
m <- t(sapply(TTRs, `length<-`, max(lengths(TTRs))))
推荐阅读
- numpy - 在 google colaboratory 上处理自动编码器时如何处理大型训练集?
- linux - 如何使用 grep 提取第三列?
- javascript - 如何在 HTML/CSS 中有可选的分屏布局?
- node.js - 如何处理多个 API 请求
- apache - .htaccess 重定向除某个域的一个和另一个内部重定向之外的所有页面
- python-3.x - 如何在 django-rest 中设置默认的内部序列化程序数据?
- python - 如何在 Python 的 sys.stdin 中的一行中提取多个单词?
- linux - 在脚本命令中使bash扩展通配符?
- vue.js - VueJs - 在页面重新加载之前等待 OPTION 响应
- r - 使用 R markdown 在 pdf 文档中呈现表格