我想循环浏览这种类型的字符变量的名称。
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
这边.
另一种解决方案,因为你已经只选择了你想colbind的一列。
predictions <- [...] %>%
select(aggregate.1) %>%
`colnames<-`(paste0('predictions_',i))
第二,将数据框架分配给一个变量,正如上面Santiago所评论的那样。assign
应该会让你到那里。
assign(
paste0('test_RF_',i),
cbind(test, predictions),
envir=globalenv()
)