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

问题描述 投票:0回答:1

我想循环浏览这种类型的字符变量的名称。

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"

有什么线索吗?

尊敬的各位

r for-loop dplyr character names
1个回答
1
投票

首先,对于你的循环中的动态重命名,下面的代码段应该会有帮助(我已经自由地修改了一下。

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 这边.

另一种解决方案,因为你已经只选择了你想colbind的一列。

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

第二,将数据框架分配给一个变量,正如上面Santiago所评论的那样。assign 应该会让你到那里。

assign(
    paste0('test_RF_',i),
    cbind(test, predictions),
    envir=globalenv()
)
© www.soinside.com 2019 - 2024. All rights reserved.