2011-07-12 11 views
-1

は私が例で詳しく説明してみましょう:あなたが見ることができるようにコンバイン異なるクラスの引数

mystr = "foo" 
intvector = c(1,2,3,4,5) 
trial1 = c(mystr,intvector) 
sapply(trial1,class) 

trial2 = mat.or.vec(1+length(intvector),1) 
trial2[1] = mystr 
trial2[2:length(trial2)] = intvector 
sapply(trial2,class) 

の両方が

 foo   1   2   3   4   5 
"character" "character" "character" "character" "character" "character" 

を返し、Rは、変換/私のためにcharacter型にnumericタイプをキャストし、私が望むものではありません。ありがとう:)

編集:私はdata.frameに直接(rbind)それを追加するために使用します。最初は空ですので、列クラスはまだ定義されていません。

+0

これは、1つのクラスが1つのクラスにすぎないため、これは予期された動作です。 1行で 'data.frame'(あなたが以下の答えに書いたように)を使って、どうやってやるのです。 –

答えて

1

私は、これは動作するはずと信じて誰もがよりよい解決策を見つけた場合は、リストを使用しなくても、私に知らせてください。

trial3 = data.frame(I(mystr), t(intvector)) 
sapply(trial3,class) 

が生成されます、我々はIでmystrをラップし、これが機能するためにはintvectorを移調する必要が

mystr  X1  X2  X3  X4  X5 
    "AsIs" "numeric" "numeric" "numeric" "numeric" "numeric" 

注意を。

+0

それは、OPが求めていたことを示していません。彼はさまざまなクラスの1つの列を望んでいました。ありえない。 –

+0

@DWin、あなたは1つの "行"を意味しましたか(Gregaは 'rbind'を望んでいるので)。私はこの解決策は大丈夫だと思います。また、OPがこの回答の著者でもあることに注意してください。 :) –

3

リストを使用しないと回避できません。 c機能は、この場合には「文字」である「最小公分母」に強制されます。

trial1 = list(mystr,intvector) 
sapply(trial1,class) 
#[1] "character" "numeric" 
+0

ありがとうございます。私はリストを使わずに答えを見つけようとしていたはずですが、その結果をdata.frame(空でもよいし、列クラスも定義されていない)に直接追加するからです。 –

+0

成功の望みはありません。データフレームの列は、すべて同じモードとクラスである必要があります。 –

+0

データフレームの列は、同じモードとクラスである必要はありません。 1つの列内のすべての要素だけが同じモードとクラスである必要があります。 –

関連する問題