使用for循环标识符设置文件名

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

我试图保存 for 循环的结果,其中每个循环选择 tibble 的一个子集,然后适合这个子集。我有 150 个 txt 文件,我使用以下方法将其加载到数据框中:

filelist = list.files(pattern = ".*.txt")

files <- stringr::str_sort(filelist, numeric = TRUE)

combined_files <- readr::read_delim(files, col_names = FALSE, id = "path")
names(combined_files) <- c("ID","f", "Re", "Im")

这给了我一个数据框,其中每个文件的数据依次列出。

然后,我在 for 循环中包含一条语句,该语句采用与每个文件对应的该数据帧的子集:

for (i in filter1$ID)
{

#Define total Z and calculate w
  
filter2 <- tibble(filter1$ID == i, filter1$f, filter1$Re, filter1$Im)
names(filter2) <- c("ID", "f", "Re", "Im")

for 循环似乎适用于拟合方面,但是当我尝试使用以下方法在循环末尾保存结果时:


write.csv(fit_dataframe, file = glue::glue("model_{i}.csv"))

我没有得到任何输出。有没有更简单的方法来做到这一点?很高兴提供更多信息。

r for-loop save
1个回答
0
投票

我还是有点不清楚你到底想做什么。

如果问题实际上在于将结果写入文件,那么您的代码应该可以正常工作。

MWE:

library(tidyverse)

d <- data.frame(ID = rep(1:10, each=10),
                x = rnorm(100, 20, 4)) |>
  mutate(y = x*1.2+rnorm(100))

for (i in unique(d$ID)) {
  write.csv(d[d$ID==i,], file = glue::glue("model_{i}.csv"))
}
> list.files(pattern="model")
 [1] "model_1.csv"  "model_10.csv" "model_2.csv"  "model_3.csv"  "model_4.csv"  "model_5.csv"  "model_6.csv"  "model_7.csv" 
 [9] "model_8.csv"  "model_9.csv" 

因此,如果您确定没有生成文件,则错误一定介于两者之间。另请注意,如果这是您所期望的,则

write.csv
将不会产生控制台输出。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.