簡體   English   中英

將字符列表傳遞到 R 中的 file.path

[英]Passing list of characters into file.path in R

我想從文件夾路徑中獲取父目錄。

說我有:“C:/Users/YS/2020 projects/APP/pect/PDC/src”

我想得到:“C:/Users/YS/2020 projects/APP/pect/PDC”

#Get current directory
cpath = getwd()

#Remove last folder from path
dir <- strsplit(cpath,"/")
dir <- dir[[1]]
parent_dir <- dir[1:length(dir)-1]

#Return file path
file.path(parent_dir)

這些是我的環境變量:

在此處輸入圖片說明

這是我從代碼中得到的輸出:

[1] "C:"            "Users"         "YS"            "2020 projects" "APP"           "pect"          "PDC"    

我希望它返回:

[1] "C:/Users/YS/2020 projects/APP/pect/PDC"

為什么我不能將字符列表傳遞到 file.path() 中?

我對環境變量中的 dir 如何被列為字符而不是列表或向量感到有些困惑

我也有點困惑為什么 strsplit 返回一個包含 1 個值的列表?

如果我們想刪除“src”,一個選項是sub

sub("[/][a-z]+$", "", cpath)

如果我們要使用file.path ,用法是

file.path(..., fsep = .Platform$file.sep)

...表示多個參數一一傳遞,即

file.path(parent_dir[1], parent_dir[2])
#[1] "C:/Users"

等等

parent_dir
#[1] "C:"            "Users"         "YS"            "2020 projects" "APP"           "pect"          "PDC"         

如果我們想復制它,一個選項是將它放在一個list並使用file.pathdo.call

do.call(file.path, as.list(parent_dir))
#[1] "C:/Users/YS/2020 projects/APP/pect/PDC"

或使用Reduce

Reduce(file.path, as.list(parent_dir))
#[1] "C:/Users/YS/2020 projects/APP/pect/PDC"

將數組作為輸入傳遞時,它將函數分別應用於每個元素。 可能需要對數組使用paste

paste(parent_dir, collapse = "/")

另一種可能更簡單的方法:

dirname(getwd())

strsplit返回一個列表的原因是它可以處理多個輸入:

 users <- c("c:/users/A", "c:/users/B")
 strsplit(users, "/")

[[1]]
[1] "c:"    "users" "A"    

[[2]]
[1] "c:"    "users" "B"

對於環境, dir是一個有 8 個元素的字符array

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM