setwd() 的路径分配在 for/foreach 循环中延迟
Path assignment to setwd() is delayed in for/foreach loop
objective 是在 for 循环中更改当前工作目录并在其中做一些其他事情,例如搜索文件。路径存储在通用变量中。
我 运行 的 R 代码如下:
require("foreach")
# The following lines are generated by an external tool and stored in filePath.info
# Loaded via source("filePaths.info")
result1 <- '/home/user/folder1'
result2 <- '/home/user/folder2'
result3 <- '/home/user/folder3'
number_results <- 3
# So I know that I have all in all 3 folders with results by number_results
# and that the variable name that contains the path to the results is generic:
# string "result" plus 1:number_results.
# Now I want to switch to each result path and do some computation within each folder
start_dir <- getwd()
print(paste0("start_dir: ",start_dir))
# For every result folder switch into the directory of the folder
foreach(i=1:number_results) %do% {
# for (i in 1:number_results){ leads to the same output
# Assign path in variable, not the variable name as string: current_variable <- result1 (not string "result1")
current_variable <- eval(parse(text = paste0("result", i)))
print(paste0(current_variable, " in interation_", i))
# Set working directory to string in variable current_variable
current_dir <- setwd(current_variable)
print(paste0("current_dir: ",current_dir))
# DO SOME OTHER STUFF WITH FILES IN THE CURRENT FOLDER
}
# Switch back into original directory
current_dir <- setwd(start_dir)
print(paste0("end_dir: ",current_dir))
输出如下...
[1] "start_dir: /home/user"
[1] "/home/user/folder1 in interation_1"
[1] "current_dir: /home/user"
[1] "/home/user/folder2 in interation_2"
[1] "current_dir: /home/user/folder1"
[1] "/home/user/folder3 in interation_3"
[1] "current_dir: /home/user/folder2"
[1] "end_dir: /home/user/folder3"
...虽然我会预料到这一点:
[1] "start_dir: /home/user"
[1] "/home/user/folder1 in interation_1"
[1] "current_dir: /home/user/folder1"
[1] "/home/user/folder2 in interation_2"
[1] "current_dir: /home/user/folder2"
[1] "/home/user/folder3 in interation_3"
[1] "current_dir: /home/user/folder3"
[1] "end_dir: /home/user/"
原来分配给current_dir的路径有点"behind" ...
为什么会这样?
由于我离成为 R 专家还很远,所以我不知道是什么导致了这种行为,也不知道最重要的是如何获得所需的行为。
因此,任何帮助、提示、代码 correction/optimization 将不胜感激!
R version 3.3.1 (2016-06-21) -- "Bug in Your Hair"
Platform: x86_64-pc-linux-gnu (64-bit)
来自 ?setwd
帮助页面...
setwd
returns the current directory before the change, invisibly and with the same conventions as getwd
. It will give an error if it does not succeed (including if it is not implemented).
所以当你
current_dir <- setwd(current_variable)
print(paste0("current_dir: ",current_dir))
您获取的不是 "current" 目录,您获取的是前一个目录。您应该使用 getwd()
来获取当前的
setwd(current_variable)
current_dir <- getwd()
print(paste0("current_dir: ",current_dir))
objective 是在 for 循环中更改当前工作目录并在其中做一些其他事情,例如搜索文件。路径存储在通用变量中。 我 运行 的 R 代码如下:
require("foreach")
# The following lines are generated by an external tool and stored in filePath.info
# Loaded via source("filePaths.info")
result1 <- '/home/user/folder1'
result2 <- '/home/user/folder2'
result3 <- '/home/user/folder3'
number_results <- 3
# So I know that I have all in all 3 folders with results by number_results
# and that the variable name that contains the path to the results is generic:
# string "result" plus 1:number_results.
# Now I want to switch to each result path and do some computation within each folder
start_dir <- getwd()
print(paste0("start_dir: ",start_dir))
# For every result folder switch into the directory of the folder
foreach(i=1:number_results) %do% {
# for (i in 1:number_results){ leads to the same output
# Assign path in variable, not the variable name as string: current_variable <- result1 (not string "result1")
current_variable <- eval(parse(text = paste0("result", i)))
print(paste0(current_variable, " in interation_", i))
# Set working directory to string in variable current_variable
current_dir <- setwd(current_variable)
print(paste0("current_dir: ",current_dir))
# DO SOME OTHER STUFF WITH FILES IN THE CURRENT FOLDER
}
# Switch back into original directory
current_dir <- setwd(start_dir)
print(paste0("end_dir: ",current_dir))
输出如下...
[1] "start_dir: /home/user"
[1] "/home/user/folder1 in interation_1"
[1] "current_dir: /home/user"
[1] "/home/user/folder2 in interation_2"
[1] "current_dir: /home/user/folder1"
[1] "/home/user/folder3 in interation_3"
[1] "current_dir: /home/user/folder2"
[1] "end_dir: /home/user/folder3"
...虽然我会预料到这一点:
[1] "start_dir: /home/user"
[1] "/home/user/folder1 in interation_1"
[1] "current_dir: /home/user/folder1"
[1] "/home/user/folder2 in interation_2"
[1] "current_dir: /home/user/folder2"
[1] "/home/user/folder3 in interation_3"
[1] "current_dir: /home/user/folder3"
[1] "end_dir: /home/user/"
原来分配给current_dir的路径有点"behind" ...
为什么会这样? 由于我离成为 R 专家还很远,所以我不知道是什么导致了这种行为,也不知道最重要的是如何获得所需的行为。 因此,任何帮助、提示、代码 correction/optimization 将不胜感激!
R version 3.3.1 (2016-06-21) -- "Bug in Your Hair"
Platform: x86_64-pc-linux-gnu (64-bit)
来自 ?setwd
帮助页面...
setwd
returns the current directory before the change, invisibly and with the same conventions asgetwd
. It will give an error if it does not succeed (including if it is not implemented).
所以当你
current_dir <- setwd(current_variable)
print(paste0("current_dir: ",current_dir))
您获取的不是 "current" 目录,您获取的是前一个目录。您应该使用 getwd()
来获取当前的
setwd(current_variable)
current_dir <- getwd()
print(paste0("current_dir: ",current_dir))