Data.frame,包含一列中的字符和数字

时间:2013-11-01 15:23:19

标签: r

我有一个我在R中使用的函数,需要输入几个参数,一次作为数字(1)和一个字符(NULL)。默认值为NULL。

我想使用所有可能的参数组合来应用函数,所以我使用expand.grid来尝试创建一个存储这些参数的数据框。但是,我遇到了在一列中创建包含数字和字符的对象的问题。

这是我尝试过的:

comb<-expand.grid(c("NULL",1),c("NULL",1),stringsAsFactors=FALSE),返回:

comb
Var1 Var2
1 NULL NULL
2    1 NULL
3 NULL    1
4    1    1

包含所有条目字符:

class(comb[1,1])
[1] "character"

如果我现在尝试将数字插入特定位置,我仍会收到一个字符:

comb[2,1]<-as.numeric(1)
class(comb[2,1])
[1] "character"

我也尝试使用stringsAsFactors=TRUE,或使用expand.grid(c(0,1),c(0,1)),然后为{{1}切换0但总是有完全相同的问题:每当我这样做时,我都没有得到数字NULL

使用1手动创建对象,然后将cbind作为字符插入也无济于事。我很感激指针,或者使用所有可能的参数组合来运行函数。

1 个答案:

答案 0 :(得分:0)

正如您所知,一般来说,数据框列需要是单一类型。很难解决您的具体问题,因为解决方案可能并非真正“将多个类型放入一个列”,而是重新组织您的其他看不见的代码以在此限制内工作。 / p>

正如我所建议的那样,最好将内置NA值用作expand.grid(c(NA,1),c(NA,1)),然后修改函数以使用NA作为输入。或者,当然,您可以使用一些“特殊”数值,如-1,或-99或其他。

我提到的相关问题是你真的应该避免使用字符串“NULL”来表示任何意思,因为NULL是R中的一个特殊值,并且随后会出现混淆。

这些策略都比混合类型和使用保留字的字符串(如NULL)更可取。

所有这一切,技术上 可以解决这个问题,但它很尴尬,并不是一个好主意。

d <- data.frame(x = 1:5)
> d$y <- list("a",1,2,3,"b")
> d
  x y
1 1 a
2 2 1
3 3 2
4 4 3
5 5 b
> str(d)
'data.frame':   5 obs. of  2 variables:
 $ x: int  1 2 3 4 5
 $ y:List of 5
  ..$ : chr "a"
  ..$ : num 1
  ..$ : num 2
  ..$ : num 3
  ..$ : chr "b"