我有一个我在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
作为字符插入也无济于事。我很感激指针,或者使用所有可能的参数组合来运行函数。
答案 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"