You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言逐句统计单词字符数并将计数频率存入指定数组

R实现逐句统计不同词长单词数并写入指定维度数组

你卡壳的核心原因是原有循环只遍历了列表元素本身,没有同步获取每个元素对应的句子序号,自然无法匹配array_output第2个维度(对应4个句子)的位置。以下是可直接运行的实现方案:


前置步骤(修正原有小问题)

注意不要用list当自定义变量名,会和R内置的list()函数重名引发报错,替换为语义明确的变量名即可:

# 原始测试文本
text <- c("Three blind mice", 
          "Three blind mice", 
          "See how they run see how they run",
          "They all ran after the farmers wife who cut off their heads with a carving knife")

# 分词得到词列表
word_list <- strsplit(text, split = " ")

# 预创建维度为c(9,4,1)的数组:行对应词长1-9,列对应4个句子,第3维度固定为1
array_output <- array(0, dim = c(9,4,1))

方法1:修正原有循环逻辑(适合新手理解)

给循环加上位置索引,统计时固定词长范围避免错位即可:

# seq_along(word_list)会生成1-4的序列,对应4个句子的位置
for(sentence_idx in seq_along(word_list)){
  # 计算当前句子所有单词的字符长度
  word_lengths <- nchar(word_list[[sentence_idx]])
  # 统计各长度出现次数,固定1-9的水平,避免某长度未出现时结果错位
  length_count <- table(factor(word_lengths, levels = 1:9))
  # 将统计结果写入数组对应位置
  array_output[, sentence_idx, 1] <- as.numeric(length_count)
}

方法2:向量化简写方案(无需手动写循环)

用lapply完成遍历统计后直接重组为目标数组结构,代码更简洁:

# 遍历每个句子,统计1-9长度单词的出现频次
count_result <- lapply(word_list, \(words){
  as.numeric(table(factor(nchar(words), levels = 1:9)))
})
# 将列表结果按列拼接,转为要求的3维数组
array_output <- array(do.call(cbind, count_result), dim = c(9,4,1))

踩坑提醒

  • 统计词长时必须固定1-9的取值范围:直接调用table(nchar(i))会自动跳过当前句子未出现的词长,导致统计结果长度和数组第一维的9行不匹配,写入时出现位置错乱;转为固定水平的因子后,未出现的词长会自动记为0,保证位置完全对应。
  • 取列表内元素时要用双中括号[[]],单中括号返回的还是子列表,无法直接传入nchar()计算。

内容的提问来源于stack exchange,提问作者K-J

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 17:16:17