0

R で使用している関数があり、数値 (1) と文字 (NULL) として、複数のパラメーターへの入力が必要です。デフォルトは NULL です。

可能なすべてのパラメーターの組み合わせを使用して関数を適用したいので、expand.grid を使用して、これらを格納するデータフレームを作成しようとしました。ただし、1 つの列に数値と文字の両方を含むオブジェクトを作成すると問題が発生します。

これは私が試したことです:

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)) を使用して試してみましたが、 0for を切り替えNULLますが、常にまったく同じ問題があります。これを行うたびに、数値を取得します1

を使用して手動でオブジェクトを作成し、文字としてcbind挿入しNULLても役に立ちません。ポインター、またはパラメーターの可能なすべての組み合わせで関数を実行するための回避策に感謝します。

4

1 に答える 1

0

言われたように、一般的に言えば、データ フレームの列は単一の型である必要があります。解決策は実際には「複数の型を単一の列に入れる」ことではなく、他の目に見えないコードをこの制限内で機能するように再編成することである可能性が高いため、特定の問題を解決するのは困難です。

NA私が提案したように、組み込みの値を as として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"
于 2013-11-01T15:58:16.493 に答える