希望有人能帮助我理解为什么错误的\ n字符出现在我在R中创建的字符串向量中。
尝试导入和清理固定宽度格式的非常宽的数据文件 (http://www.state.nj.us/education/schools/achievement/2012/njask6/,'数据运行的文本文件')。遵循UCLA tutorial使用read.fwf和this优秀的SO问题,在导入后给出列名称。
因为文件非常宽,所以列标题很长 - 所有这些都在一起,只有29,800个字符。我将它们作为简单的字符串向量传递:
column_names <- c(...)
我会在这里饶恕丑陋的转储,但我将整件事丢弃在pastebin上。
当我注意到我的一些子集返回0行时,正在清理和转换一些变量以进行分析。在困惑之后(我拼错了什么?)它意识到不知何故有一堆&#39; \ n&#39;我的列标题中引入了换行符。
如果我遍历我创建的column_names矢量
for (i in 1:length(column_names)) {
print(column_names[i])
}
我看到第81行中间的第一个换行符 -
特殊科学编号登记科学
我尝试解决这个问题的途径:
1)这是关于我的环境的吗?我在R中使用常规脚本编辑器,我的行做换行 - 但我屏幕上的断点与\ n字符的位置不匹配,这对我来说是建议的它不是R脚本编辑器。
2)是否有GUI设置?做了一些searching,但找不到任何东西。
3)有模式吗?似乎换行字符大约每4000个字符插入一次。对R / S原语进行了一些阅读,试图弄清楚这是否与基本的R数据结构有关,但很快就在我脑海中。
我尝试将长字符串分解为shorter chunks,然后将它们组合起来,这似乎解决了这个问题。
column_names.1 <- c(...)
column_names.2 <- c(...)
column_names_combined <- c(column_names.1, column_names.2)
所以我有一个即时的解决方法,但很想知道这里到底发生了什么。
与角色向量问题有关的一些posts建议我运行内存配置文件:
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。 谢谢!
答案 0 :(得分:12)
我怀疑这是一个错误。相反,看起来你遇到了控制台的已知限制。正如在Section 1.8 - R commands, case sensitivity, etc.的An Introduction to 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", ...)