如何使用foreach遍历R中的向量元素

how to loop over vector elements in R with foreach

我对 R 比较陌生,不知道如何将我的 for 循环变成 foreach 循环。

我有一个包含几个元素的向量,即

> hpattern
[1] "sim0_pmax.tif" "sim0_vmax.tif" "sim1_pmax.tif" "sim1_vmax.tif"
> typeof(hpattern)
[1] "character"

首先:我来自python这个词,hpattern项应该是一个列表,因为它是这样创建的

list_h30 = data.frame(list.files(path = tr30dir, pattern=paste(depthfile,".+$",sep=""), recursive = TRUE, full.names = FALSE))
hpattern <- sub(paste(".*",depthfile,sep=""), "", list_h30[,1]) 

为什么 typeof hpattern 是字符而不是列表?

第二:如果我运行

for (hpi in hpattern) {print(hpi)}

我明白了

[1] "sim0_pmax.tif"
[1] "sim0_vmax.tif"
[1] "sim1_pmax.tif"
[1] "sim1_vmax.tif"

如果我运行

foreach(hpi=hpattern, .combine='c') %do% {print(hpi)}

我明白了

[1] "sim0_pmax.tif"
[1] "sim0_vmax.tif"
[1] "sim1_pmax.tif"
[1] "sim1_vmax.tif"
[1] "sim0_pmax.tif" "sim0_vmax.tif" "sim1_pmax.tif" "sim1_vmax.tif"

我不明白为什么我得到最后一个输出。

正如 Roland 所说,sub returns 一个字符向量(在 R 中,大多数东西都是向量)。另一个检查对象的有用函数是 str.

关于foreach:它结合了每次循环执行的输出。您已指定您想要一个矢量(按 .combine = 'c')。

由于 print returns 每个对象都是不可见的,每个 hpi 都在循环内打印,然后组合到最终向量中。与不打印时比较:

foreach(hpi=hpattern, .combine='c') %do% {hpi}
[1] "sim0_pmax.tif" "sim0_vmax.tif" "sim1_pmax.tif" "sim1_vmax.tif"