これは、アンケートの重み付けをどのように行うかという問題から始まった物語です。これを正しく行っているように見えたので、少し壁にぶつかりました (インポート プロセスの詳細とstrata
変数の由来については、以前の投稿を参照してください)。
> require(foreign)
> ipums <- read.dta('/path/to/data.dta')
> require(survey)
> ipums.design <- svydesign(id=~serial, strata=~strata, data=ipums, weights=perwt)
Error in if (nbins > .Machine$integer.max) stop("attempt to make a table with >= 2^31 elements") :
missing value where TRUE/FALSE needed
In addition: Warning messages:
1: In pd * (as.integer(cat) - 1L) : NAs produced by integer overflow
2: In pd * nl : NAs produced by integer overflow
> traceback()
9: tabulate(bin, pd)
8: as.vector(data)
7: array(tabulate(bin, pd), dims, dimnames = dn)
6: table(ids[, 1], strata[, 1])
5: inherits(x, "data.frame")
4: is.data.frame(x)
3: rowSums(table(ids[, 1], strata[, 1]) > 0)
2: svydesign.default(id = ~serial, weights = ~perwt, strata = ~strata,
data = ipums)
1: svydesign(id = ~serial, weights = ~perwt, strata = ~strata, data = ipums)
tabulate
このエラーは関数から発生しているようです。最初に.Machine$integer.max
> .Machine$integer.max <- 2^40
そして、それがうまくいかなかったとき、のソースコード全体tabulate
:
> tabulate <- function(bin, nbins = max(1L, bin, na.rm=TRUE))
{
if(!is.numeric(bin) && !is.factor(bin))
stop("'bin' must be numeric or a factor")
#if (nbins > .Machine$integer.max)
if (nbins > 2^40) #replacement line
stop("attempt to make a table with >= 2^31 elements")
.C("R_tabulate",
as.integer(bin),
as.integer(length(bin)),
as.integer(nbins),
ans = integer(nbins),
NAOK = TRUE,
PACKAGE="base")$ans
}
どちらも問題を回避しませんでした。これがパッケージを作成した理由の 1 つff
であるようですが、私が心配しているのは、これが .NET で避けられない問題であるということR
です。この投稿は、この問題を回避するパッケージを使用したとしても、一度に 2^31 個の要素しかアクセスできないことを示しているようです。私の希望は、メモリの問題を回避するためにsql
(sqlite
または) を使用することでしたが、残念ながら、それを機能させるにはしばらく時間がかかり、同じ基本的な制限に遭遇するだけです。postgresql
に戻そうとしてStata
も問題は解決しません。の使用方法については以前の投稿を参照してくださいsvyset
。ただし、実行したい計算が原因Stata
でハングします。
svy: mean age, over(strata)
より多くのメモリを投入することで問題が解決するかどうかはわかりません。R
私は 16 GB のデスクトップで実行しStata
、現在メモリ割り当てを 2000MB に設定している Windows サーバーを介して使用していますが、理論的にはそれを増やして実験することができました。
つまり、要約すると:
- これはハード制限
R
ですか? sql
私の問題を解決しますかR
?- それを多くの個別のファイルに分割すると、それは修正されますか (多くの作業...)?
- 多くのメモリを投入する
Stata
ことはできますか? - どういうわけか間違ったツリーを真剣に吠えていますか?