如何从字符向量创建多个对象:将对象名称作为向量元素名称,将对象值作为向量元素值

3

想象我们有:

X <- 1:4
names(X) <- c("A" ,"B" , "C", "D")

我想在全局环境中创建四个对象A、B、C、D,分别对应值1、2、3、4。我认为解决方案涉及到assign和apply函数,但希望这里的某个人能想出比我更好的方法。
(背景:我想创建一种伪造的make文件,基于一个命名的字符向量,在其中,名称是我想要创建的对象的名称,而值是我想要用来填充每个对象的csv文件的名称和位置... 上面的玩具示例是迈向这个目标的一步。)

2
最好把所有东西都放在一个列表中。这个的某个版本应该是更好的选择。 - Roland
谢谢。我总体上同意列表的观点,但认为这可能是一个例外。我想创建一个半自动化的Makefile脚本,用于获取和准备多个数据框以进行进一步分析,但当然我不知道最终会使用多少数据集,因此不希望在开始时硬编码数据框的名称和数量。 - JonMinton
通常情况下,您将所有文件放在一个目录中,然后使用lapplylist.files以及read.csv。我不明白您的用例如何是个例外。 - Roland
2个回答

3
您可以使用list2env
list2env(as.list(X),.GlobalEnv)

当然,正如评论中提到的,使用分离的全局变量并混乱全局环境并不是一种好的实践。在R中,正确的方法是将您的变量存储在列表或向量中,并使用xxapply系列函数来操作每个向量元素。


2
+1 但我们应该提到全局环境不应该被混乱。 - Roland

3
试试这样做:
for(i in seq_along(x)){
     assign(names(x)[i],x[i])
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接