rbind
名前のない data.frames を結合するときに関数が意図したとおりに機能しない理由を理解しようとしています。これが私のテストです:
test <- data.frame(
id=rep(c("a","b"),each=3),
time=rep(1:3,2),
black=1:6,
white=1:6,
stringsAsFactors=FALSE
)
# take some subsets with different names
pt1 <- test[,c(1,2,3)]
pt2 <- test[,c(1,2,4)]
# method 1 - rename to same names - works
names(pt2) <- names(pt1)
rbind(pt1,pt2)
# method 2 - works - even with duplicate names
names(pt1) <- letters[c(1,1,1)]
names(pt2) <- letters[c(1,1,1)]
rbind(pt1,pt2)
# method 3 - works - with a vector of NA's as names
names(pt1) <- rep(NA,ncol(pt1))
names(pt2) <- rep(NA,ncol(pt2))
rbind(pt1,pt2)
# method 4 - but... does not work without names at all?
pt1 <- unname(pt1)
pt2 <- unname(pt2)
rbind(pt1,pt2)
これは私には少し奇妙に思えます。これがそのままでは機能しない正当な理由がありませんか?
追加情報を編集する
@ JoshO'Brienの提案を使用して、関数のこのステートメント部分でdebug
エラーが発生していることを特定できますif
rbind.data.frame
if (is.null(pi) || is.na(jj <- pi[[j]]))
(コードのオンライン バージョン: http://svn.r-project.org/R/trunk/src/library/base/R/dataframe.Rで始まる: " ### rbind と cbind のメソッドは次のとおりです。 ")
プログラムをステップ実行すると、pi
この時点での値が設定されていないように見えるため、プログラムは組み込み定数pi
のようなインデックスを作成しようとしてpi[[3]]
エラーになります。
私が理解できることから、内部オブジェクトは、次のように初期化されpi
たこの前の行のために設定されているようには見えません:clabs
NULL
if (is.null(clabs)) clabs <- names(xi) else { #pi gets set here
私はこれを理解しようとして混乱していますが、まとまり次第更新します。