这是我与R有关的一个基本问题。我知道可能有解决方案来完成我的任务,但我想问为什么我的功能不会起作用。
我有一个看起来像这样的data.frame
A B C
1 2 3
2 3 4
我希望将A
,B
或C
中的每个值存储到名称为A
,B
和{{1}的单个对象中}。
所以我的功能
C
但它不起作用。有人可以善良并指出我做对了什么吗?
答案 0 :(得分:1)
假设您的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.frame
,第二个会创建vector
s。
干净会话中的示例:
> 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
中的上述示例中,用于抑制输出。
答案 1 :(得分: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