r - 在 R 中的 read.table 上,flush 函数有什么作用?
问题描述
我最近开始参加 R 讲座,目前正在扫描文件。在工作表上,我的一个问题是:
阅读文件Table6.txt,先签出文件。请注意,信息是重复的,我们只想要第一个不重复的信息。确保这次只创建角色而不是因素。最后,我们不想要评论。
该文件名为Table6.Txt
我设法编写了正确读取表格的代码,但答题纸在扫描功能中有一个额外的部分,上面写着flush=TRUE
我的代码就像:
df <- read.table("Table6.txt",skip = 1,header = TRUE,row.names = "Name",nrow
= 7,comment.char = "@",stringsAsFactors = FALSE)
并且答题纸显示
df <- read.table("Table6.txt",skip = 1,header = TRUE,row.names = "Name",nrow
= 7,flush = TRUE,comment.char = "@",stringsAsFactors = FALSE)
冲洗功能在这里做什么?两个代码的输出给出相同的数据帧。
df <- read.table("Table6.txt",skip = 1,header = TRUE,row.names = "Name",nrow
= 7,flush = TRUE,comment.char = "@",stringsAsFactors = FALSE)
df
Age Height Weight Sex
Alex 25 177 57 F
Lilly 31 163 69 F
Mark 23 190 83 M
Oliver 52 179 75 M
Martha 76 163 70 F
Lucas 49 183 83 M
Caroline 26 164 53 F
df <- read.table("Table6.txt",skip = 1,header = TRUE,row.names = "Name",nrow
= 7,comment.char = "@",stringsAsFactors = FALSE)
df
Age Height Weight Sex
Alex 25 177 57 F
Lilly 31 163 69 F
Mark 23 190 83 M
Oliver 52 179 75 M
Martha 76 163 70 F
Lucas 49 183 83 M
Caroline 26 164 53 F
解决方案
read.table
我在and阅读了文档,scan
这就是我用简单的话理解的内容。flush
尝试通过忽略额外字符(如果有)来完成数据帧。
例如,让我们使用您共享的相同数据
read.table(text = 'Age Height Weight Sex
Alex 25 177 57 F
Lilly 31 163 69 F
Mark 23 190 83 M
Oliver 52 179 75 M
Martha 76 163 70 F
Lucas 49 183 83 M
Caroline 26 164 53 F', header = TRUE)
这按预期工作并返回
# Age Height Weight Sex
#Alex 25 177 57 F
#Lilly 31 163 69 F
#Mark 23 190 83 M
#Oliver 52 179 75 M
#Martha 76 163 70 F
#Lucas 49 183 83 M
#Caroline 26 164 53 F
现在让我们在最后添加一个额外的字符。
read.table(text = "Age Height Weight Sex
Alex 25 177 57 F
Lilly 31 163 69 F
Mark 23 190 83 M
Oliver 52 179 75 M
Martha 76 163 70 F
Lucas 49 183 83 M
Caroline 26 164 53 F A", header = TRUE)
^ #Notice this A
它给出了一个错误
扫描错误(文件 = 文件,什么 = 什么,sep = sep,quote = quote,dec = dec,:第 7 行没有 5 个元素
这是有道理的,因为最后一行中有一个额外的字符。
我们可以添加fill = TRUE
read.table(text = "Age Height Weight Sex
Alex 25 177 57 F
Lilly 31 163 69 F
Mark 23 190 83 M
Oliver 52 179 75 M
Martha 76 163 70 F
Lucas 49 183 83 M
Caroline 26 164 53 F A", header = TRUE, fill = TRUE)
# Age Height Weight Sex
#Alex 25 177 57 F
#Lilly 31 163 69 F
#Mark 23 190 83 M
#Oliver 52 179 75 M
#Martha 76 163 70 F
#Lucas 49 183 83 M
#Caroline 26 164 53 F
#A NA NA NA
NA
这会根据列的类型填充 ' 或空字符,从而在末尾添加一个额外的行。
现在如果我们添加flush = TRUE
read.table(text = "Age Height Weight Sex
Alex 25 177 57 F
Lilly 31 163 69 F
Mark 23 190 83 M
Oliver 52 179 75 M
Martha 76 163 70 F
Lucas 49 183 83 M
Caroline 26 164 53 F A", header = TRUE, flush = TRUE)
# Age Height Weight Sex
#Alex 25 177 57 F
#Lilly 31 163 69 F
#Mark 23 190 83 M
#Oliver 52 179 75 M
#Martha 76 163 70 F
#Lucas 49 183 83 M
#Caroline 26 164 53 F
它最后忽略了附加内容"A"
,将其视为注释并制作完整的数据框。
在您的情况下,这对最终输出没有任何影响,因为您的数据是完整的并且没有任何不完整的信息。如果您正在读取您不知道其结构的数据,您可以将此视为一种安全的编程实践。
希望这能澄清一点。
comment.char
正如@Christoph 所评论的,这里有一个例子来说明和之间的区别flush
read.table(text = 'Age Height Weight Sex
Alex 25 177 57 F
Lilly 31 163 69 F
Mark 23 190 83 M
Oliver 52 179 75 M
Martha 76 163 70 F
@ Lucas 49 183 83 M
Caroline 26 164 53 F @', header = TRUE,flush = TRUE)
# Age Height Weight Sex
#Alex 25 177 57 F
#Lilly 31 163 69 F
#Mark 23 190 83 M
#Oliver 52 179 75 M
#Martha 76 163 70 F
#@ Lucas 49 183 83
#Caroline 26 164 53 F
read.table(text = 'Age Height Weight Sex
Alex 25 177 57 F
Lilly 31 163 69 F
Mark 23 190 83 M
Oliver 52 179 75 M
Martha 76 163 70 F
@ Lucas 49 183 83 M
Caroline 26 164 53 F @', header = TRUE,comment.char = '@')
# Age Height Weight Sex
#Alex 25 177 57 F
#Lilly 31 163 69 F
#Mark 23 190 83 M
#Oliver 52 179 75 M
#Martha 76 163 70 F
#Caroline 26 164 53 F
flush = TRUE
@
不忽略倒数第二行开头的存在,而是忽略最后一个字符 ( ) M
。但是,comment.char
我们可以忽略文本任何部分的确切字符。
推荐阅读
- opencv - 使用 OpenCV 复制 Gimp 的颜色->反转操作
- python - 一次读取和打印一个字符 - Python 中的 getche() 和退格键
- angular - 如何在 Angular 中以 / 为起点设置经过身份验证和未经身份验证的路由?
- apache-spark - Pyspark 数据框 - 将元组数据转换为行
- java - 如何使用 Selenium 和 Java 从 ui-datepicker 中查找活动日期
- javascript - 增量在 for 循环中无法正常工作
- javascript - 每当变量在服务器端更改其值时,如何使用 socket.io 向客户端发送数据?
- c# - 从互联网服务获取 DateTime 并在瞬间与 LocalTime 进行比较
- javascript - C3.js - 在条形图中添加 X 轴和图例之间的间距
- c# - 返回列表上的Stackoverflow异常