r - 如何在 R 中保存具有不同名称的 forloop()
问题描述
我有一个函数和一个 for 循环,我想将相同的 for 循环迭代 3 次for(i in 1:3){}
并将 for 循环输出保存为具有不同名称的列表,例如df.1
、df.2
和df.3
。提前谢谢了。
df <- tibble( a = rnorm(10),b = rnorm(10))
rescale01 <- function(x) {
rng <- range(x, na.rm = TRUE)
(x - rng[1]) / (rng[2] - rng[1])
}
for (i in seq_along(df)) {
df[[i]] <- rescale01(df[[i]])
}
df
预期答案
DF.1
A tibble: 10 x 2
a b
<dbl> <dbl>
1 1 0.624
2 0 0.421
3 0.551 1
4 0.320 0.466
5 0.266 0.247
6 0.0261 0.103
7 0.127 0.519
8 0.588 0.0623
9 0.489 0
10 0.556 0.540
DF.2
A tibble: 10 x 2
a b
<dbl> <dbl>
1 1 0.624
2 0 0.421
3 0.551 1
4 0.320 0.466
5 0.266 0.247
6 0.0261 0.103
7 0.127 0.519
8 0.588 0.0623
9 0.489 0
10 0.556 0.540
DF.3
A tibble: 10 x 2
a b
<dbl> <dbl>
1 1 0.624
2 0 0.421
3 0.551 1
4 0.320 0.466
5 0.266 0.247
6 0.0261 0.103
7 0.127 0.519
8 0.588 0.0623
9 0.489 0
10 0.556 0.540
解决方案
将for
循环代码放在一个函数中,并n
使用replicate
-
apply_fun <- function(df) {
for (i in seq_along(df)) {
df[[i]] <- rescale01(df[[i]])
}
df
}
result <- replicate(3, apply_fun(df), simplify = FALSE)
result
将有数据框列表。
如果您希望它们作为单独的数据框命名列表并使用list2env
.
names(result) <- paste0('df.', seq_along(result))
list2env(result, .GlobalEnv)
推荐阅读
- node.js - 更正 emacs (Debian) 中的 node.js 对象输出
- tomcat - Solrcloud 5.5.5 与 Tomcat
- javascript - 当歌词可见时隐藏描述,反之亦然(以及可能的错误?)
- mysql - MYSQL 重复行具有不同的 id 和 created_at 列
- c++ - 读取 system() 命令错误响应信息
- python - Return Max and min not working right
- wso2 - WSO2 ESB 读/写 IBM i (AS/400) 数据队列
- iot - 在 BigchainDB 中断言为 IOT
- c# - 三元运算符未给出预期结果
- c - 初始化时 C-LibCurl 崩溃:curl_global_init() 和 curl_easy_init()