如何用Base R将data.frame写入R文件?消除write.table警告
问题描述
需用Base R将R文件中的data.frame写入另一个R文件,尝试过cat、capture.output、write.table、sink四种方法,其中write.table效果最接近预期,但会触发不希望出现的警告,且不愿全局屏蔽所有警告。
源数据框:
my.df <- data.frame(scenario = 3333, AA = 200, BB = 999, CC = 444, DD = 7)
期望生成的目标R文件代码(变量名需为my.df):
my.df <- read.table(text = ' scenario AA BB CC DD 3333 200 999 444 7 ', header = TRUE, stringsAsFactors = FALSE)
当前使用write.table时触发的警告:
Warning message: In write.table(my.df, file = R.file, col.names = TRUE, row.names = FALSE, : appending column names to file
解决方案
方案1:消除write.table的警告
警告源于append=TRUE且col.names=TRUE时,R判定为追加列名而触发提示。改用col.names=NA即可避免警告,同时保留列名写入:
# 定义目标文件路径 R.file <- "target_file.R" # 写入代码开头部分 cat('my.df <- read.table(text = \' ', file = R.file) # 写入数据框,col.names=NA自动写入列名且无警告 write.table(my.df, file = R.file, append = TRUE, col.names = NA, row.names = FALSE, quote = FALSE) # 写入代码结尾部分 cat('\', header = TRUE, stringsAsFactors = FALSE)', file = R.file, append = TRUE)
方案2:更简洁的完整文本构造方案
直接构造包含所有代码的字符串,一次性写入文件,无需分块追加,彻底避免警告:
# 定义目标文件路径 R.file <- "target_file.R" # 生成无行名的数据框文本 df_text <- capture.output(print(my.df, row.names = FALSE)) # 拼接成完整的代码字符串 code_full <- sprintf('my.df <- read.table(text = \' %s \', header = TRUE, stringsAsFactors = FALSE)', paste(df_text, collapse = '\n')) # 写入文件 cat(code_full, file = R.file)
内容的提问来源于stack exchange,提问作者Mark Miller
相关产品推荐
相关产品推荐

