2011-07-12 29 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轉換/注塑numeric類型character類型對我來說,這不是我想要的。謝謝:)

編輯:我將使用結果追加(rbind)它直接到data.frame,它最初將是空的,所以列類將不會被定義。

+0

這是預期的行爲,因爲一個向量只能有一個類。在一行中使用'data.frame'(如你在下面的答案中提到的那樣)是我將如何做到的。 –

回答

1

我認爲這應該工作。如果有人發現了一個更好的解決方案,而無需使用列表,請讓我知道。

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

產地:

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

請注意,我們必須包裝在I myStr的和調換intVector的,爲了這個工作。

+0

沒錯,這並不能滿足OP的要求。他想要一個不同班級的專欄。不可能。 –

+0

@DWin,你的意思是一個「行」(因爲格雷格想''綁定')。我認爲這個解決方案很好。另外請注意,OP也是這個答案的作者。 :) –

3

如果你不使用列表,你無法避免。該c功能將強制爲「最小公分母」,在這種情況下是「性格「:

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

謝謝你的解決方案。我應該說,我試圖找到一個沒有使用列表的答案,因爲我會將結果直接附加到data.frame(它也可以是空的,所以列類沒有定義)。 –

+0

你沒有成功的希望。數據框的列需要都是相同的模式和類。 –

+0

數據幀的列不需要是相同的模式和類。只有一列中的所有元素需要具有相同的模式和類別。 –