scr*_*Owl 9 compression zip gzip r vowpalwabbit
我正在尝试将数据帧写入gzip文件但有问题.
这是我的代码示例:
df1 <- data.frame(id = seq(1,10,1), var1 = runif(10), var2 = runif(10))
gz1 <- gzfile("df1.gz","w" )
writeLines(df1)
Run Code Online (Sandbox Code Playgroud)
错误
writeLines(df1):无效的'text'参数
有什么建议?
编辑:我想写的字符向量的示例行是:
0 | var1:1.5 var2:.55 var7:1250
Run Code Online (Sandbox Code Playgroud)
类标签/ y变量通过"|"与x-vars分隔,变量名通过":"与变量之间的空格分隔.
EDIT2:我为问题的措辞/格式道歉,但结果如下:旧方法:
system.time(write(out1, file="out1.txt"))
# user system elapsed
# 9.772 17.205 86.860
Run Code Online (Sandbox Code Playgroud)
新方法:
writeGzFile <- function(){
gz1 = gzfile("df1.gz","w");
write(out1, gz1);
close(gz1)
}
system.time( writeGzFile())
# user system elapsed
# 2.312 0.000 2.478
Run Code Online (Sandbox Code Playgroud)
非常感谢大家帮助我解决这个问题.
use*_*691 19
writeLines需要一个字符串列表.将此写入gzip文件的最简单方法是
df1 <- data.frame(id = seq(1,10,1), var1 = runif(10), var2 = runif(10))
gz1 <- gzfile("df1.gz", "w")
write.csv(df1, gz1)
close(gz1)
Run Code Online (Sandbox Code Playgroud)
这将把它写成一个gzip压缩文件.另请参阅write.table以及write.csv2将文件写出的其他方法.
编辑:基于有关所需格式的帖子的更新,我做了以下帮助(快速抛出,可能承认大量的简化):
function(df) {
rowCount <- nrow(df)
dfNames <- names(df)
dfNamesIndex <- length(dfNames)
sapply(1:rowCount, function(rowIndex) {
paste(rowIndex, '|',
paste(sapply(1:dfNamesIndex, function(element) {
c(dfNames[element], ':', df[rowIndex, element])
}), collapse=' ')
)
})
}
Run Code Online (Sandbox Code Playgroud)
所以输出看起来像
a <- data.frame(x=1:10,y=rnorm(10))
writeLines(myser(a))
# 1 | x : 1 y : -0.231340933021948
# 2 | x : 2 y : 0.896777389870928
# 3 | x : 3 y : -0.434875004781075
# 4 | x : 4 y : -0.0269824962632977
# 5 | x : 5 y : 0.67654540494899
# 6 | x : 6 y : -1.96965253674725
# 7 | x : 7 y : 0.0863177759402661
# 8 | x : 8 y : -0.130116466571162
# 9 | x : 9 y : 0.418337557610229
# 10 | x : 10 y : -1.22890714891874
Run Code Online (Sandbox Code Playgroud)
所有必要的是将gzfile传递给writeLines以获得所需的输出.
要将某些内容写入 gzip 文件,您需要将其“序列化”为文本。对于 R 对象,您可以使用以下方法来尝试dput:
gz1 = gzfile("df1.gz","w")
dput(df1, gz1)
close(gz1)
Run Code Online (Sandbox Code Playgroud)
但是,您刚刚将数据框的文本表示形式写入文件。这很可能比使用save(df1,file="df1.RData")将其保存到本机 R 数据文件的效率要低。问问自己:为什么我要把它保存为 .gz 文件?
在使用一些随机数的快速测试中,gz 文件为 54k,.RData 文件为 34k
另一种非常简单的方法是:
# We create the .csv file
write.csv(df1, "df1.csv")
# We compress it deleting the .csv
system("gzip df1.csv")
Run Code Online (Sandbox Code Playgroud)
从以下地方得到这个想法:http://blog.revolutionanalytics.com/2009/12/r-tip-save-time-and-space-by-compressing-data-files.html