2011-07-12 30 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

数据帧的列不需要是相同的模式和类。只有一列中的所有元素需要具有相同的模式和类别。 –