对于我正在编写的函数,输出是一个数据帧。但是,如何将数据框的一列中的值分配给对象?
例如,如果我有两个向量cbind
进入数据帧
>numbers<-c(33, 44, 55, 66)
>names<-c("A", "B", "C", "D")
>MYdataframe<-data.frame(cbind(names, numbers))
我会得到这个:
>MYdataframe
names numbers
1 A 33
2 B 44
3 C 55
4 D 66
但如何将数字(例如33
)分配给对象(例如A
)
答案 0 :(得分:2)
它看起来不是一个好主意:你的函数将在全局环境或其父环境中分配变量,而不是返回一些东西。如果要返回多个值,可以将它们放在命名列表中,例如list(A=3.14, B=2.71)
,或者如果它们都具有相同类型的向量(如果可以将它们放在data.frame中,它们就可以)
此外,在您的示例中,cbind
会将数字转换为因素:我不确定这是故意的。
但是,如果您真的坚持,可以使用assign
完成此操作。
library(plyr)
d_ply( MYdataframe, "names", function(u)
assign( as.character(u$names[1]), u$numbers, envir=.GlobalEnv)
)
答案 1 :(得分:1)
如果您真的想将字符值用作名称,将数值用作数字向量的“名称”,那么这样就可以了:
names(numbers) <- names
numbers
# A B C D
#33 44 55 66
numbers["A"]
# A
# 33
也许你应该说出你真正想要的东西,以及为不是函数名称的对象选择名称(names
是一个函数)将帮助我们把事情整理好。