1

我正在尝试编写一个输入文件,该文件在第一行中需要一行,告诉文件是否稀疏,如果是,则有多少个变量级别。我知道如何将单行附加到文件的末尾,但找不到附加到文件第一行的方法。有什么建议么?

library(e1071)
library(caret)
library(Matrix)
library(SparseM)

iris2 <- iris
iris2$sepalOver5 <- ifelse(iris2$Sepal.Length >= 5, 1, -1) 
head(iris2)
summary(iris2)

trainRows <- sample(1:nrow(iris2), nrow(iris2) * .66, replace = F)
testRows <- which(!(1:nrow(iris2) %in% trainRows))
sum(testRows %in% trainRows)
sum(trainRows %in% testRows)

vtu1 <- c('Sepal.Width','Petal.Length','Petal.Width','Species')
dv1 <- dummyVars( ~., data = iris2[,vtu1], sparse = T)

train <- iris2[trainRows,]
test <- iris2[testRows,]

trainX <- as.matrix.csr(predict(dv1, train))
testX <- as.matrix.csr(predict(dv1, test))
trainY <- train[,'sepalOver5']
testY <- test[,'sepalOver5']

write.matrix.csr( as(trainX , "matrix.csr"), file= "amz.train" ,  fac = TRUE)
headString <- paste('sparse ',max(trainX@ja),sep = '')

我基本上想在第一行headString插入/追加。amz.train有什么建议么?

4

1 回答 1

0

通常不可能在文件的开头添加(如果有办法,它们将非常低效,因为内存中文件开头的信息通常是未知的。这适用于任何编程语言)。

想到三个选项:

  • 读入文件,先写其他信息,再写文件其余内容(也可能效率低下)
  • 先写下你要前置的信息
  • 如果您有一个无法追加的写入器(write.matrix例如没有追加选项),您可以尝试将此元信息与数据框合并,然后将其作为一个整体写入。

由于您使用的是专用格式,因此我不建议以这种方式存储此元信息。

您的文件如下所示:

sparse 6
1:3 2:5.2 3:2 6:1 
1:3.7 2:1.5 3:0.2 4:1 
1:3.2 2:6 3:1.8 6:1

然后是选项4:

相反,考虑拥有一个包含诸如文件名、是否稀疏以及级别数等信息的元文件。在这里你可以追加,如果你想重复这个过程,那就更好了。它将避免读取格式奇怪的文件的问题。

于 2013-10-20T13:16:39.477 回答