首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Quanteda警告:结果的列数不是向量长度的倍数(arg 2030)

Quanteda警告:结果的列数不是向量长度的倍数(arg 2030)
EN

Stack Overflow用户
提问于 2017-08-02 11:48:09
回答 1查看 1.5K关注 0票数 1

试图使用readtext library (随quanteda library一起提供)在R中解析7000多个txt文件,我收到了以下警告。

警告消息: In (函数(.,deparse.level = 1):结果的列数不是向量长度的倍数(arg 2030)

如何找出哪个txt文件导致警告?

使用详细选项不显示是否发生警告。对于您的信息,尝试解析两个文件时,我会得到以下信息(如果一次只解析一个文档,则不会显示警告)。

阅读文本从/Users/OS/surfdrive/Competenties/Data-step-1/BinnenlandsBestuur/1982/9-12/Office透镜20170308-102311.jpg.txt阅读文本从/Users/OS/surfdrive/Competenties/Data-step-1/BinnenlandsBestuur/1983/Office透镜20170308-103518.jpg.txt,使用全球模式.读取(txt)文件: Office 20170308-102311.jpg.txt,使用glob模式读取(txt)文件: Office 20170308-103518.jpg.txt读取2个文档。警告消息: 1: In (函数(.,deparse.level = 1):结果的列数不是向量长度(arg 2) 2的倍数: if ( == 2& nchar(msg) > 70) pad <- paste0("\n",pad):条件的长度>1,只使用第一个元素

代码语言:javascript
复制
Session info
R version 3.4.0 (2017-04-21)
Platform: x86_64-apple-darwin15.6.0 (64-bit)
Running under: macOS Sierra 10.12.5

Matrix products: default
BLAS: /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/3.4/Resources/lib/libRlapack.dylib

locale:
[1] C/C/C/C/C/en_US.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
 [1] tm.plugin.webmining_1.3 XML_3.98-1.7            readtext_0.50           RoogleVision_0.0.1.1   
 [5] outliers_0.14           stringdist_0.9.4.4      ltm_1.0-0               polycor_0.7-9          
 [9] msm_1.6.4               MASS_7.3-47             psych_1.7.5             WriteXLS_4.0.0         
[13] plyr_1.8.4              metafor_2.0-0           Matrix_1.2-9            metaSEM_0.9.14         
[17] OpenMx_2.7.12           xlsx_0.5.7              xlsxjars_0.6.1          rJava_0.9-8            
[21] readxl_1.0.0            quanteda_0.9.9-65       koRpus.lang.nl_0.01-3   koRpus_0.11-1          
[25] sylly_0.1-1             jsonlite_1.5            httr_1.2.1             

loaded via a namespace (and not attached):
 [1] sylly.ru_0.1-1      splines_3.4.0       ellipse_0.3-8       RcppParallel_4.3.20 shiny_1.0.3        
 [6] sylly.it_0.1-1      expm_0.999-2        sylly.es_0.1-1      cellranger_1.1.0    slam_0.1-40        
[11] yaml_2.1.14         backports_1.1.0     lattice_0.20-35     digest_0.6.12       googleAuthR_0.5.1  
[16] colorspace_1.3-2    htmltools_0.3.6     httpuv_1.3.3        tm_0.7-1            devtools_1.13.2    
[21] xtable_1.8-2        mvtnorm_1.0-6       scales_0.4.1        tibble_1.3.3        openssl_0.9.6      
[26] ggplot2_2.2.1       withr_1.0.2         lazyeval_0.2.0      NLP_0.1-10          mnormt_1.5-5       
[31] RJSONIO_1.3-0       survival_2.41-3     magrittr_1.5        mime_0.5            memoise_1.1.0      
[36] evaluate_0.10       boilerpipeR_1.3     nlme_3.1-131        foreign_0.8-67      rsconnect_0.8      
[41] tools_3.4.0         data.table_1.10.4   stringr_1.2.0       munsell_0.4.3       compiler_3.4.0     
[46] rlang_0.1.1         grid_3.4.0          RCurl_1.95-4.8      bitops_1.0-6        rmarkdown_1.5      
[51] gtable_0.2.0        curl_2.6            R6_2.2.2            sylly.en_0.1-1      knitr_1.16         
[56] fastmatch_1.1-0     sylly.fr_0.1-1      rprojroot_1.2       stringi_1.1.5       parallel_3.4.0     
[61] sylly.de_0.1-1      Rcpp_0.12.11 

谢谢你,彼得

PS。如果这个信息不够,我将在github页面上发布一个可复制的示例。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-02 12:56:34

您可以使用purrr查找与所需内容不匹配的列。

首先,让我们用一个文件创建一些演示数据,该文件与其他三个文件的名称不同.

代码语言:javascript
复制
library(tidyverse)
library(purrr)
library(stringr)
old_wd <- getwd()
setwd(tempdir())

demo_data <- tibble(x = rnorm(327),
                    y = rnorm(327),
                    z = rnorm(327))

write_csv(demo_data, "demo1.csv")
write_csv(demo_data, "demo2.csv")
write_csv(demo_data, "demo3.csv")

bad_data <-
  tibble(
    x = rnorm(327),
    y = rnorm(327),
    z = rnorm(327),
    extra_column = rnorm(327)
  )

write_csv(bad_data, "demo4.csv")

现在定义列名应该是什么。对于本例,正确的名称是xyz

代码语言:javascript
复制
correct_names <- c("x", "y", "z")

此函数将读取csv并检查所有名称是否与correct_names中的列名匹配。

代码语言:javascript
复制
get_csv_names <- function(path){
  c(path, all(names(read_csv(path)) == correct_names))
}

我假设您希望处理工作目录中的所有csv文件。否则,您将希望将files的值从下面的值更改为.

代码语言:javascript
复制
files <- list.files() %>% 
  tbl_df() %>% 
  filter(str_detect(value, ".csv")) %>% 
  pull()

现在只是将files映射到get_csv_names函数的问题。请注意demo4.csv是如何具有FALSE值的,这意味着它的列名与您在correct_names中指定的名称不匹配。

代码语言:javascript
复制
map(files, get_csv_names)

# [[1]]
# [1] "demo1.csv" "TRUE"     
# 
# [[2]]
# [1] "demo2.csv" "TRUE"     
# 
# [[3]]
# [1] "demo3.csv" "TRUE"     
# 
# [[4]]
# [1] "demo4.csv" "FALSE"  

由于我们在开始时更改了工作目录,所以最好在结束时重新设置它。

代码语言:javascript
复制
setwd(old_wd)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45460055

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档