在for循环中命名对象

0kjbasz6  于 2023-09-27  发布在  其他
关注(0)|答案(1)|浏览(130)

我有这个for循环来处理(校正)一些光谱数据:

  1. names_list <- ls(pattern="s+\\d") # the names of the uncorrected spectra are s01, s02, s02 etc...
  2. c <- mget(ls(pattern="s+\\d"))
  3. for (file in c) {
  4. process <- process_spec(file,
  5. active = TRUE,
  6. adj_intens = FALSE,
  7. adj_intens_args = list(type = "none"),
  8. conform_spec = TRUE,
  9. conform_spec_args = list(range = FTIR_lib$wavenumber, res = 5, type = "interp"),
  10. etc...)
  11. names <- paste0("corr_", names_list)
  12. assign(names, process, envir = .GlobalEnv) # OPTION 1
  13. list2env(as.list(setNames(names, process)), envir = .GlobalEnv) # OPTION 2
  14. }

我想在一个循环中将这个校正函数(process_spec())应用于我的所有光谱(s01,s02,s03等),并将全局环境中的这些校正对象命名为:corr_s01、corr_s02等...
选项1不起作用。
选项2创建“值”,而不是对象。
未校正的光谱对象示例:

  1. str(s01)
  2. List of 3
  3. $ wavenumber: num [1:7468] 400 401 401 402 402 ...
  4. $ spectra :Classes data.table and 'data.frame': 7468 obs. of 1 variable:
  5. ..$ intensity: num [1:7468] 0.46 0.453 0.446 0.442 0.438 ...
  6. ..- attr(*, ".internal.selfref")=<externalptr>
  7. $ metadata :Classes data.table and 'data.frame': 1 obs. of 5 variables:
  8. ..$ x : int 1
  9. ..$ y : int 1
  10. ..$ file_name: chr "s01"
  11. ..$ file_id : chr "Nahal_Rahaf_2"
  12. ..$ col_id : chr "intensity"
  13. ..- attr(*, ".internal.selfref")=<externalptr>
  14. - attr(*, "class")= chr [1:2] "OpenSpecy" "list"

谢谢

hc8w905p

hc8w905p1#

在R语言中,通常不是一个好主意,让一堆命名的全局变量遵循一个特定的模式(如corr_sN),而是使用一个列表。
corrList = lapply(c, function(file) process_spec(file, ...))
...替换为process_spec的所有参数。
然后,可以通过索引corrList[[i]]访问这些对象

相关问题