0

我有一个在 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)) 然后切换出0forNULL但总是有完全相同的问题:每当我这样做时,我都不会得到一个数字1

使用手动创建对象cbind然后将其插入NULL为字符也无济于事。我将不胜感激指针或解决方法来运行具有所有可能参数组合的函数。

4

1 回答 1

0

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

NA正如我所建议的那样,使用内置值 asexpand.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"
于 2013-11-01T15:58:16.493 回答