如何使用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"
我对 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"