1

文字列と数値の行列をまとめるために cbind を使用していますが、数値のすべての列 (最初の列を除く) を NULL として返しています。サンプルコードは次のとおりです。

nums <- matrix(data=c(1,2,3,4),ncol=2)
strs <- list()
strs[1] <- 'row1'
strs[2] <- 'row2'
result <- cbind(strs,nums)

> result
     strs         
[1,] "row1" 1 NULL
[2,] "row2" 2 NULL

私は明らかに単純なものを見落としています。助けてくれてありがとう、

4

2 に答える 2

3

この場合、問題について少し間違った方法で取り組んでいると思います。cbind行列を返します。行列の制限の 1 つは、すべての要素が同じ型でなければならないことです。これは、c(1, 2, 3, 4)意志がマトリックスに強制されると、存在する最高レベルのデータ型 (この場合は の文字strs) になり、 と同等になることを意味しc("1", "2", "3", "4")ます。

2 つの要素を持つリストがありstrs、実際に必要なのは data.frame (さまざまな型を保持できる) であると仮定します。

strsどちらの場合も、最初に文字に変換しましょう。

strs2 <- unlist(strs)
[1] "row1" "row2"

これは、 で作成した場合と同じであることに注意してくださいc("row1", "row2")。次に、data.frame を作成します。

result <- data.frame(strs2, nums)
  strs2 X1 X2
1 row1   1  3
2 row2   2  4

これは、@thelatemail が提供したソリューションと基本的に同じです。

于 2012-11-20T23:39:33.790 に答える
1

リストを と組み合わせるとcbind()、問題が発生する可能性があります。sebastian-c がコメントで言ったようにするか、最初に使用unlist()します。strs

cbind(unlist(strs), nums)

または単に使用しますmatrix()

matrix(c(strs, nums), ncol = 3)

nums可変数の列がある場合:

matrix(c(strs, nums), ncol = ncol(nums) + 1)
于 2012-11-20T11:22:29.097 に答える