1

こんにちは、これは R に関する基本的な質問です。タスクを実行するための解決策があるかもしれないことは知っていますが、関数が機能しない理由をお聞きしたいと思います。

私はこのようなdata.frameを持っています

A B C
1 2 3
2 3 4

Aそして、それぞれの値を、、Bまたは名前をC持つ個々のオブジェクトに格納したいと考えています。ABC

だからここに私の機能

splitcolnames<-function(x)
  {for (i in colnames(x)){
    subset(x, select=c(i))->i}}
}

しかし、うまくいきません。誰かが親切で、私が正しくなかったことを指摘できますか?

4

2 に答える 2

2

あなたのdata.frame名前が「mydf」であると仮定すると、次のいずれかがそれを行うはずです。

lapply(names(mydf), function(x) assign(x, mydf[x], envir = .GlobalEnv))
lapply(names(mydf), function(x) assign(x, mydf[, x], envir = .GlobalEnv))

1 つ目は単一列data.frameの を作成し、2 つ目は を作成しますvector

クリーン セッションでの例:

> rm(list = ls())
> ls()
character(0)
> mydf <- data.frame(A = c(1, 2), B = c(3, 4))
> mydf
  A B
1 1 3
2 2 4
> invisible(lapply(names(mydf), function(x) assign(x, mydf[x], envir = .GlobalEnv)))
> ls()
[1] "A"    "B"    "mydf"
> A
  A
1 1
2 2
> rm(list = ls())
> mydf <- data.frame(A = c(1, 2), B = c(3, 4))
> invisible(lapply(names(mydf), function(x) assign(x, mydf[, x], envir = .GlobalEnv)))
> ls()
[1] "A"    "B"    "mydf"
> B
[1] 3 4

上記の例ではinvisible、出力を抑制します。

于 2013-04-17T05:42:42.563 に答える
0

これはおそらく良い考えではないという@RomanLustrikのコメントに同意しますが、探している関数はassign

for (i in colnames(x)) 
  assign(i, subset(x, select=i))

> A
#   A
# 1 1
# 2 2

> B
#   B
# 1 2
# 2 3

そうは言っても、あなたはそのattach機能を知っていますか?

 ?attach
于 2013-04-17T07:13:09.757 に答える