唯一最接近我的问题的是:are-there-raw-strings-in-r 然而这对我的帮助还不够。
问题
我在数据框中有一个类似于 Windows 的格式路径:
data.frame(path = c("X:\01_aim\01_seq.R", "X:\01_aim\02_seq.R", "X:\01_aim\03_seq.R"),
dat = c("data1.csv", "data2.csv", "data1.csv"))
目的是将路径转换为类似 Unix 的路径,因此我需要如下输出:
data.frame(path = c("/01_aim/01_seq.R", "/01_aim/02_seq.R", "/01_aim/03_seq.R"),
dat = c("data1.csv", "data2.csv", "data1.csv"))
我的方法
操作上面看到的路径的方法会生成以下错误:
> sub("\0", "##", "X:\01_aim\01_seq.R")
# Error: nul character not allowed (line 1)
我已经找到了使用 r"()"
格式选项打印路径的方法,它给出了:
> r"(X:\01_aim\01_seq.R)"
[1] "X:\01_aim\01_seq.R"
这样我的最终解决方案将接近:
tmp_path <- str_replace_all(string = r"(X:\01_aim\01_seq.R)",
pattern = r"(\\)",
replacement = "/")
str_replace_all(tmp_path, r"(X:)", "")
[1] "/01_aim/01_seq.R"
但我缺少的是如何强制变量中给定字符串的r"( )"
格式。具体来说,当我有一个函数时:
convert.path <- function(my.path){
# how can I force the variable my.path to be stored as r"(`my.path`)"
# so that I can insert the above code here.
my.path.raw <- to.r.brackets(my.path)
tmp_path <- str_replace_all(my.path.raw, pattern = r"(\\)", replacement = "/")
str_replace_all(tmp_path, r"(X:)", "")
}
我想强制重新格式化以代替注释。有谁知道如何制作这个技巧吗?
最佳答案
一种方法是使用gsub()
eval(parse(text = ...))
内:
dat <- data.frame(path = c("X:\01_aim\01_seq.R", "X:\01_aim\02_seq.R", "X:\01_aim\03_seq.R", "X:\01_aim\04_seq.R"),
dat = c("data1.csv", "data2.csv", "data1.csv", "data2.csv"))
temp <- eval(parse(text= gsub("\\", "/", deparse(dat$path), fixed=TRUE)))
gsub("X:", "", temp)
#> [1] "/001_aim/001_seq.R" "/001_aim/002_seq.R" "/001_aim/003_seq.R"
#> [4] "/001_aim/004_seq.R"
由 reprex package 于 2021 年 8 月 23 日创建(v2.0.1)
另一种方法是使用 stringi::stri_escape_unicode
转义包含一个反斜杠的字符串。 。由于字符串在转义之前已转换为 unicode,因此会添加不需要的 u0
在每对反斜杠之后。然后我们可以使用gsub("\\\\u0", "/")
获取所需的文件路径。
dat <- data.frame(path = c("X:\01_aim\01_seq.R", "X:\01_aim\02_seq.R", "X:\01_aim\03_seq.R"),
dat = c("data1.csv", "data2.csv", "data1.csv"))
temp <- gsub("X:", "", stringi::stri_escape_unicode(dat$path))
gsub("\\\\u0", "/", temp)
#> [1] "/001_aim/001_seq.R" "/001_aim/002_seq.R" "/001_aim/003_seq.R"
由 reprex package 于 2021 年 8 月 23 日创建(v2.0.1)
关于r - R中find_replace nul字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68892051/