1

嗨,这是我对 R 提出的一个基本问题。我知道可能有解决方案可以完成我的任务,但我想问一下为什么我的功能无法工作。

我有一个看起来像这样的 data.frame

A B C
1 2 3
2 3 4

我想将每个值存储在 中AB或存储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))

第一个将创建单列data.frames,第二个将创建vectors。

干净会话中的示例:

> 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 回答