Bob*_*bby 5 textwrangler filemaker r list rstudio
我有很多代码使用$运算符而不是[[.我已经阅读了许多优点,[[并希望重构所有代码.
以下方法会有任何问题吗?我怎样才能最好地在Mac上进行搜索并替换为RStudio或TextWrangler?
l <- list()
l$`__a` <- data.frame(`__ID` = stringi::stri_rand_strings(10, 1), col = stringi::stri_rand_strings(10, 1), check.names = F )
Run Code Online (Sandbox Code Playgroud)
代码现在看起来像这样:
l$`__a`$`__ID`
Run Code Online (Sandbox Code Playgroud)
我想重构它:
l[["__a"]][["__ID"]]
Run Code Online (Sandbox Code Playgroud)
为实现这一目标,以下替代品是否足够?
$` to [["
` to "]]
Run Code Online (Sandbox Code Playgroud)
我在我的代码中找到了一个区域,这个方法不起作用,现在我也找到了一个解决方法来避免这个问题:用dplyr避免反引号字符
df <- dat[["__Table"]] %>% select(`__ID` ) %>% mutate(fk_table = "__Table", val = 1)
Run Code Online (Sandbox Code Playgroud)
在进行上面的替换之前,我需要将select函数更改为this以避免错误替换反引号字符:
select_(as.name("__ID"))
Run Code Online (Sandbox Code Playgroud)
遗憾的是,__由于数据是从关系数据库(FileMaker)下载的,并且需要在保留列名的同时将数据写回数据库,因此无法避免使用in列名.
参考文献[[:
关于R中的重构的参考:
你可以尝试:
v <- c("l$`__a`$`__ID`")
library(stringi)
stri_replace_all_fixed(v, c('$`', '`'), c('[["', '"]]'), vectorize_all = FALSE)
Run Code Online (Sandbox Code Playgroud)
这使:
#[1] "l[[\"__a\"]][[\"__ID\"]]"
Run Code Online (Sandbox Code Playgroud)
注意:您会\"在输出中看到 ,因为print()在显示引号时对引号进行了转义。您可以将上面的内容包装起来noquote()以查看输出,而无需\"
noquote(
stri_replace_all_fixed(v, c('$`', '`'), c('[["', '"]]'), vectorize_all = FALSE)
)
Run Code Online (Sandbox Code Playgroud)
这使:
#[1] l[["__a"]][["__ID"]]
Run Code Online (Sandbox Code Playgroud)
如果您想将其应用于整个文件,您可以尝试:
writeLines(stri_replace_all_fixed(readLines("script.R"),
c('$`', '`'), c('[["', '"]]'), vectorize_all = FALSE),
file("new_script.R"))
Run Code Online (Sandbox Code Playgroud)