我最近开始参加R讲座,目前正在研究文件扫描。在工作表上,我的问题之一是:
该文件称为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
和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
它给出了一个错误
这很有意义,因为最后一行中有一个附加字符。
我们可以添加
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"
,将其视为注释并制作了完整的数据框。在您的情况下,这不会对最终输出产生任何影响,因为您的数据是完整的并且没有任何不完整的信息。如果您正在读取结构不明的数据,可以将其视为安全的编程习惯之一。
希望这可以澄清一点。
正如@Christoph所评论的,以下示例演示了
comment.char
和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
,我们可以忽略文本任何部分中出现的确切字符。关于r - 在R中的read.table上,flush函数有什么作用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59126539/