【发布时间】:2021-11-30 23:51:16
【问题描述】:
我对 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"
我不明白为什么我得到最后一个输出。
【问题讨论】:
-
1.你为什么期待一份清单?
sub总是返回一个字符向量。 2.在学习foreach循环之前,你应该学习lapply循环。如果你理解lapply,这是一个经常使用的基本R函数,那么理解foreach循环会容易得多。最后一个输出行是foreach循环的返回值。避免在您的示例中使用print。