9

希望有人可以帮助我理解为什么错误的 \n 字符会出现在我在 R 中创建的字符串向量中。

尝试导入和清理固定宽度格式的非常宽的数据文件(http://www.state.nj.us/education/schools/achievement/2012/njask6/,“数据运行的文本文件”)。按照加州大学洛杉矶分校关于使用 read.fwf的教程和这个优秀的 SO 问题在导入后给出列名。

因为文件很宽,所以列标题很长 - 加起来不到 29,800 个字符。我将它们作为简单的字符串向量传递:

column_names <- c(...)

我会放过你这里丑陋的垃圾场,但我把整个东西都丢在了pastebin上。

当我注意到我的一些子集返回 0 行时,正在清理和转换一些变量以进行分析。在对它感到困惑之后(我拼错了什么吗?)它意识到不知何故在我的列标题中引入了一堆 '\n' 换行符。

如果我遍历我创建的 column_names 向量

for (i in 1:length(column_names)) {
  print(column_names[i])
}

我看到第 81 行中间的第一个换行符 -

SPECIAL\nEDUCATION SCIENCE 注册科学编号

我试图解决这个问题的途径:

1)这与我的环境有关吗?我在 R 中使用常规脚本编辑器,并且我的行确实换行了 - 但我屏幕上的中断与 \n 字符的位置不匹配,这对我来说表明它不是 R 脚本编辑器。

2)有GUI设置吗?做了一些搜索,但找不到任何东西。

3)有模式吗?似乎每 4000 个字符就会插入换行符。对 R/S 原语进行了一些阅读,以试图弄清楚这是否与基本的 R 数据结构有关,但很快就在我脑海中浮现。

我尝试将长字符串分解成更短的块,然后将它们组合起来,这似乎解决了问题。

column_names.1 <- c(...)
column_names.2 <- c(...)
column_names_combined <- c(column_names.1, column_names.2)

所以我有一个直接的解决方法,但很想知道这里到底发生了什么。

一些与字符向量问题有关的帖子建议我运行内存配置文件:

  memory.profile()
        NULL      symbol    pairlist     closure environment     promise 
           1        9572      220717        4734        1379        5764 
    language     special     builtin        char     logical     integer 
       63932         165        1550       18935       10302       30428 
      double     complex   character         ...         any        list 
        2039           1       60058           0           0       20059 
  expression    bytecode externalptr     weakref         raw          S4 
           1       16553         725         150         151        1162 

我在 Windows 7(Enterprise、SP 1、8 gigs RAM)上运行 R 2.15.1(64 位)R。谢谢!

4

1 回答 1

12

我怀疑这是一个错误。相反,您似乎遇到了控制台的已知限制。正如它在 R简介的第 1.8 节 - R 命令、区分大小写等中所说:

在控制台输入的命令行被限制 [3] 为大约 4095 个字节(不是字符)。

[3] 一些控制台不允许您输入更多内容,其中一些会默默丢弃多余的部分,而另一些则会将其用作下一行的开始。

要么将命令放在一个文件中source,要么将代码分成多行,方法是在适当的点(逗号之间)插入您自己的换行符。例如:

column_names <-
  c("County Code/DFG/Aggregation Code", "District Code", "School Code",
    "County Name", "District Name", "School Name", "DFG", "Special Needs",
    "TOTAL POPULATION TOTAL POPULATION Number Enrolled LAL", ...)
于 2012-10-25T03:10:51.267 回答