循环字符变量并与其交互以在 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()
)
我想遍历这种类型的字符变量的名称:
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()
)