希望有人可以帮助我理解为什么错误的\n字符出现在我在R中创建的字符串向量中.
尝试导入并清理固定宽度格式的非常宽的数据文件(http://www.state.nj.us/education/schools/achievement/2012/njask6/,'Text file for data runs').遵循加州大学洛杉矶分校关于使用read.fwf和这个优秀的SO问题的教程,在导入后给出列名.
因为文件非常宽,所以列标题很长 - 所有这些都在一起,不到29,800个字符.我将它们作为简单的字符串向量传递:
column_names <- c(...)
Run Code Online (Sandbox Code Playgroud)
我会把这个丑陋的垃圾扔给你,但是我把整个东西放在了pastebin上.
当我注意到我的一些子集返回0行时,正在清理和转换一些变量以进行分析.在困惑之后(我拼错了什么?)它意识到我的列标题中已经引入了一堆'\n'换行符.
如果我遍历我创建的column_names向量
for (i in 1:length(column_names)) {
print(column_names[i])
}
Run Code Online (Sandbox Code Playgroud)
我看到第81行中间的第一个换行符 -
特殊科学编号登记科学
我尝试解决这个问题的途径:
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)
Run Code Online (Sandbox Code Playgroud)
所以我有一个即时的解决方法,但很想知道这里发生了什么.
一些与字符向量问题有关的帖子建议我运行内存配置文件:
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
Run Code Online (Sandbox Code Playgroud)
我在Windows 7上运行R 2.15.1(64位)R(Enterprise,SP 1,8 gigs RAM).谢谢!
Jos*_*ich 12
我怀疑这是一个错误.相反,看起来你遇到了控制台的已知限制.因为它说在第1.8节- R命令,壳体灵敏度等的介绍至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", ...)
Run Code Online (Sandbox Code Playgroud)