循环字符变量并与之交互以在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()
)