R语言write.table导出筛选后dataframe仍含原全量行问题咨询
问题产生原因
核心问题是你打印看到的3行筛选结果,和实际导出时用的mydataframe2不是同一个对象,或者你打开的根本不是这次运行生成的文件,最常见的触发场景如下:
- 筛选并打印3行结果的代码写在自定义函数、R Markdown独立代码块这类局部环境里,等运行
write.table时,局部环境里生成的mydataframe2已经被销毁,导出函数调用的是全局环境中之前保存的全量版mydataframe2。 - 你是通过RStudio的图形化View窗口查看的筛选结果,这个窗口是打开对象时生成的静态快照,不会随对象内容变化自动刷新。如果看完正确结果后你不小心运行了
mydataframe2 <- mydataframe1这类覆盖赋值的代码,没在控制台重新打印核对就直接导出,写出去的就是覆盖后的全量数据。 - 文件路径或覆盖出问题:比如你写了绝对路径,但打开的是其他目录下之前测试导出的同名全量文件;如果导出时目标csv正被Excel/WPS占用,旧的全量文件不会被新文件覆盖,R抛出的权限警告被忽略,打开后自然还是全量内容。
还有个容易忽略的格式问题:
- 你导出时设置的分隔符是制表符
\t,但文件后缀命名为.csv(csv默认用逗号分隔),用Excel/WPS直接双击打开时如果没手动指定分隔符,会出现列识别错乱,所有内容挤在一起,很容易被误以为是导出了全部行。
内容的提问来源于stack exchange,提问作者Paul Sourbé。
相关产品推荐
相关产品推荐

