首页 > 解决方案 > 循环中的对象选择

问题描述

我目前在 R 中的循环中遇到对象选择的永久性问题。我相当确信这是一个常见问题,但我似乎找不到答案,所以我在这里......

这是我遇到的问题的一个实际示例:我有一个数据框作为源,其中包含一系列按顺序命名的变量(X1、X2、X3、X4 等)。我正在寻找一个函数,它将数据作为源匹配它到另一个数据集以创建一个新的组合数据集。

变量的数量会有所不同。我想向我的函数传递一个参数,告诉它我有多少变量,并且该函数需要相应地调整它将运行代码的次数。这似乎是 for 循环的一项任务,但似乎也没有一种简单的方法可以在循环中选择和重新创建变量。

这是我需要重复的代码:

new1$X1 <- data$X1[match(new1$matf1, data$rowID)]
new1$X2 <- data$X2[match(new1$matf1, data$rowID)]
new1$X3 <- data$X3[match(new1$matf1, data$rowID)]
new1$X4 <- data$X4[match(new1$matf1, data$rowID)]
new1$X5 <- data$X5[match(new1$matf1, data$rowID)]
(...)
return(new1)

我尝试过这样的事情:

for(i in 1:5) {
  new1$Xi <- assign(paste0("X", i)), as.vector(paste0("data$X",i)[match(new1$matf1, data$rowID)])
}    

没有成功。

谢谢您的帮助!

标签: rautomation

解决方案


您可以尝试这种简单的方法,但是连接会更有效:

vals <- paste0('X',1:5)

for(i in vals){
    new1[[i]] <- data[[i]][match(new1$matf1, data$rowID)]
}

推荐阅读