如何用foreach遍历R中的vector元素



我对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]) 

为什么typeofhpattern是字符而不是列表?

第二个:如果我运行

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返回一个字符向量(在R中,大多数东西都是向量)。另一个有用的函数来检查你的对象是str

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

由于print不可见地返回每个对象,每个hpi在循环中被打印,然后组合成最终的向量。与不打印时比较:

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

相关内容

  • 没有找到相关文章

最新更新