提问人:Valentina 提问时间:9/26/2023 更新时间:9/26/2023 访问量:48
在 for 循环中命名对象
Name objects in for loop
问:
我有这个循环来处理(校正)一些光谱数据:for
names_list <- ls(pattern="s+\\d") # the names of the uncorrected spectra are s01, s02, s02 etc...
c <- mget(ls(pattern="s+\\d"))
for (file in c) {
process <- process_spec(file,
active = TRUE,
adj_intens = FALSE,
adj_intens_args = list(type = "none"),
conform_spec = TRUE,
conform_spec_args = list(range = FTIR_lib$wavenumber, res = 5, type = "interp"),
etc...)
names <- paste0("corr_", names_list)
assign(names, process, envir = .GlobalEnv) # OPTION 1
list2env(as.list(setNames(names, process)), envir = .GlobalEnv) # OPTION 2
}
我想将这个校正函数()在一个循环中应用于我所有的光谱(s01、s02、s03等),并将全球环境中这些校正的物体命名为:corr_s01、corr_s02等......process_spec()
选项 1 不起作用。
选项 2 创建“值”,而不是对象。
未校正的光谱对象示例:
str(s01)
List of 3
$ wavenumber: num [1:7468] 400 401 401 402 402 ...
$ spectra :Classes ‘data.table’ and 'data.frame': 7468 obs. of 1 variable:
..$ intensity: num [1:7468] 0.46 0.453 0.446 0.442 0.438 ...
..- attr(*, ".internal.selfref")=<externalptr>
$ metadata :Classes ‘data.table’ and 'data.frame': 1 obs. of 5 variables:
..$ x : int 1
..$ y : int 1
..$ file_name: chr "s01"
..$ file_id : chr "Nahal_Rahaf_2"
..$ col_id : chr "intensity"
..- attr(*, ".internal.selfref")=<externalptr>
- attr(*, "class")= chr [1:2] "OpenSpecy" "list"
谢谢
答:
3赞
Señor O
9/26/2023
#1
在 R 中,按照特定模式(如 corr_sN)创建一堆命名的全局变量通常不是一个好主意,而只是使用列表。
corrList = lapply(c, function(file) process_spec(file, ...))
将 替换为 的所有参数。...
process_spec
然后,这些对象将可以通过索引访问corrList[[i]]
评论
0赞
Konrad Rudolph
9/26/2023
您不需要在此处使用匿名函数,允许直接内联指定更多参数:.唉,这是否比插入匿名函数更具可读性,这有点主观。lapply
lapply(c, process_spec, …)
0赞
Señor O
9/26/2023
@KonradRudolph 我很懒,并且以这种方式完成参数名称的选项卡代码 8)
0赞
Konrad Rudolph
9/26/2023
老实说,这不是一个坏理由。R的未来版本(以及周围的工具)可能会在这方面做得更好,因为目前正在讨论的语言中增加了一个新的内容。
上一个:JS 循环计数对象
评论
names_list
lapply
name_list
process_spec()
c
c