循环字符变量并与其交互以在 dplyr 中创建名称

Loop character variable and interact it to create names in dplyr

我想遍历这种类型的字符变量的名称:

names_list <- c("USA", "VEN", "CHE")

然后,我创建以下循环:

for (i in names_list) {
  set.seed(123333)
  test <- predictors_no_NA %>%
    filter(ISO3_baci != i)

predictions <- predict(rf150, test, predict.all=TRUE, type = "prob")
  predictions <- as.data.frame(predictions[1])
  predictions <- predictions %>%
    select(aggregate.1) %>%
    rename(predictions[i] = aggregate.1)    % HERE APPEARS THE 1st PROBLEM

  test_RF_[i] <- cbind(test, predictions)   % HERE APPEARS THE 2nd PROBLEM
}

请注意,变量 "rf150" 是在循环内创建的,没有任何问题(此处不显示代码)。

当我想将循环的字符串元素(例如"USA")添加到我创建的名称"predictions_[i]"或"test_RF_[i]"时,问题就出现了,这样我就可以得到一个变量这称为:"predictions_USA" 或 "test_RF_USA" 以及 "predictions_VEN" 或 "test_RF_VEN" 和 "predictions_CHE" 或 "test_RF_CHE"

有线索吗?

此致

首先,对于循环中的动态重命名,以下代码片段应该有所帮助(我已经自由地对其进行了一些改动:

library(tibble) # if you want to use as_tibble() rather than as.data.frame()
library(dplyr)

predictions <- predict(rf150, test, predict.all=TRUE, type = "prob") %>%
    .[1] %>%
    as_tibble() %>%
    select(!!paste0('predictions_',i) := aggregate.1)

dplyr over here.

中有一个关于动态变量名称主题的非常有用和详细的答案

替代解决方案,因为您已经只选择了要合并的一列:

predictions  <- [...] %>%
    select(aggregate.1) %>%
    `colnames<-`(paste0('predictions_',i))

其次,如上面 Santiago 所评论的那样,要将数据框分配给变量,assign 应该可以让您到达那里:

assign(
    paste0('test_RF_',i),
    cbind(test, predictions),
    envir=globalenv()
)