3

私は驚くべき ff および ffbase パッケージを集中的に使用しています。いくつかの技術的な詳細が原因で、R セッションを使用して C: ドライブで作業する必要があります。それが終わったら、生成されたファイルを P: ドライブに移動します (Windows でカット/ペーストを使用し、ff を使用しません)。

問題は、ffdf オブジェクトをロードするときです。

load.ffdf("data") 

エラーが発生します:

Error: file.access(filename, 0) == 0 is not TRUE

移動されたことを ffdf オブジェクトに誰も伝えていないため、これは問題ありませんが、次のことを試みています。

filename(data$x) <- "path/data_ff/x.ff"

また

pattern(data) <- "./data_ff/"

エラーが発生して、役に立ちません:

Error in `filename<-.ff`(`*tmp*`, value = filename) : 
ff file rename from 'C:/DATA/data_ff/id.ff' to 'P:/DATA_C/data_ff/e84282d4fb8.ff' failed. 

ファイルの新しい場所のパスを ffdf オブジェクトに「変更」する方法はありますか? ありがとうございました !!

4

2 に答える 2

5

後でファイル名を「修正」したい場合は、次を使用できます。

physical(x)$filename <- "newfilename"

例えば:

> a <- ff(1:20, vmode="integer", filename="./a.ff")
> saveRDS(a, "a.RDS")
> rm(a)
> file.rename("./a.ff", "./b.ff")
[1] TRUE
> b <- readRDS("a.RDS")
> b
ff (deleted) integer length=20 (20)
> physical(b)$filename <- "./b.ff"
> b[]
opening ff ./b.ff
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20

filename()もちろん、最初のセッションで使用する方が簡単でした。save.ffdfまた、パッケージ内のおよび対応するload.ffdf関数を見ることもできffbaseます。これにより、これがさらに簡単になります。

添加

のすべての列のファイル名を変更するにはffdf、次の関数を使用できます。

redir <- function(ff, newdir) {
  for (x in physical(b)) {
    fn <- basename(filename(x))
    physical(x)$filename <- file.path(newdir, fn)
  }
  return (ff)
}
于 2013-07-04T10:06:44.303 に答える
0

使用することもできますff:::clone()

R> foo <- ff(1:20, vmode = "integer")
R> foo
ff (open) integer length=20 (20)
 [1]  [2]  [3]  [4]  [5]  [6]  [7]  [8]      [13] [14] [15] [16] [17] [18] [19]
   1    2    3    4    5    6    7    8    :   13   14   15   16   17   18   19
[20]
  20
R> physical(foo)$filename
[1] "/vol/fftmp/ff69be3e90e728.ff"
R> bar <- clone(foo, pattern = "~/")
R> bar
ff (open) integer length=20 (20)
 [1]  [2]  [3]  [4]  [5]  [6]  [7]  [8]      [13] [14] [15] [16] [17] [18] [19]
   1    2    3    4    5    6    7    8    :   13   14   15   16   17   18   19
[20]
  20
R> physical(bar)$filename
[1] "/home/ubuntu/69be5ec0cf98.ff"

とのコードを簡単にざっと読んで理解したところによるsave.ffdfload.ffdf、これらの関数は、保存/読み込み時にこれを行います。

于 2013-07-04T13:39:21.520 に答える