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

循环字符变量并与之交互以在dplyr中创建名称,r,for-loop,dplyr,character,names,R,For Loop,Dplyr,Character,Names,我想循环使用这种类型的字符变量的名称: 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

我想循环使用这种类型的字符变量的名称:

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(预测)或test(测试)RF(测试)中时,问题就出现了,这样我就可以得到一个名为predictions(预测)USA或test(测试)RF(测试)USA以及predictions(预测)或test(测试)RF(测试)VEN和predictions(预测)CHE(测试)CHE(测试)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)
其次,要将数据帧分配给变量,正如上面Santiago所评论的,assign应该让您达到:

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

你试过assign+pasteo吗??我已经试过了,但要么我没有正确地实现,要么它在dplyr框架内真的不起作用。我认为,第二个问题是它应该起作用。在第一个例子中,可能使用{{},您的问题是deplyr与其他tidyverse包一起使用非标准评估。一种解决方案是使用@SantiagoI.Hurtado建议的{{``和}}}`。但是,我认为您尝试使用的结构不是。我强烈建议调整您的工作流程,使其整洁。现在只要稍微努力一下,你以后就会省去很多痛苦。多亏了@SantiagoI.Hurtado和Limey。有用的建议!
assign(
    paste0('test_RF_',i),
    cbind(test, predictions),
    envir=globalenv()
)