我编写了一个函数,该函数可获取包含其他函数脚本的文件,并将这些函数存储在替代环境中,以免它们干扰整个全局环境。该代码有效,但包含以下三个实例eval(parse(...)):
# sourceFunctionHidden ---------------------------
# source a function and hide the function from the global environment
sourceFunctionHidden <- function(functions, environment = "env", ...) {
if (environment %in% search()) {
while (environment %in% search()) {
if (!exists("counter", inherits = F)) counter <- 0
eval(parse(text = paste0("detach(", environment, ")")))
counter <- counter + 1
}
cat("detached", counter, environment, "s\n")
} else {cat("no", environment, "attached\n")}
if (!environment %in% ls(.GlobalEnv, all.names = T)) {
assign(environment, new.env(), pos = .GlobalEnv)
cat("created", environment, "\n") …Run Code Online (Sandbox Code Playgroud) 我正在尝试devtools使用以下代码将github 的开发版本安装到R Open 3.5.1:
library(devtools)
devtools::install_github("r-lib/devtools")
Run Code Online (Sandbox Code Playgroud)
第一次尝试时,出现以下输出/错误:
Downloading GitHub repo r-lib/devtools@master
? checking for file 'C:\Users\JT\AppData\Local\Temp\Rtmp8Cq1sJ\remotes215c357871af\r-lib-devtools-ab6c878/DESCRIPTION'
1. preparing 'devtools':
? checking DESCRIPTION meta-information ...
2. checking for LF line-endings in source and make files and shell scripts
3. checking for empty or unneeded directories
4. building 'devtools_2.0.2.9000.tar.gz'
5. installing *source* package 'devtools' ...
** R
** inst
** byte-compile and prepare package for lazy loading
** help
*** installing help indices
*** copying figures
** building package indices …Run Code Online (Sandbox Code Playgroud) 我想在 bash 脚本中添加一个命令,将所有 stderr 和 stdout 定向到特定文件。从这个和许多其他来源,我知道我会从命令行使用:
/path/to/script.sh >> log_file 2>> err_file
Run Code Online (Sandbox Code Playgroud)
然而,我想要在我的脚本中添加一些类似于这些 slurm 标志的东西:
#!/bin/bash
#SBATCH -o slurm.stdout.txt # Standard output log
#SBATCH -e slurm.stderr.txt # Standard error log
<code>
Run Code Online (Sandbox Code Playgroud)
有没有办法在脚本内直接输出,或者我是否需要在>> log_file 2>> err_file每次调用脚本时使用?谢谢
我想检查数据帧的两列中的值是否不匹配,并使用此信息创建一个新列。我想使用dplyr::mutate, 并且我希望能够处理NA值。可以使用以下代码生成一个简单的示例:
library(dplyr)
let <- c("a", "b", NA)
LET <- c("A")
perms <- expand.grid(
let_2 = let,
LET_2 = LET,
let_1 = let,
LET_1 = LET,
stringsAsFactors = FALSE
) %>%
.[ncol(.):1]
> perms
LET_1 let_1 LET_2 let_2
1 A a A a
2 A a A b
3 A a A <NA>
4 A b A a
5 A b A b
6 A b A <NA>
7 A <NA> A a
8 A <NA> …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用officer. 的文档(v0.3.5,2019年6月23日)指出,body_end_section并且body_default_section被弃用,建议使用body_end_section_continuous,body_end_section_landscape,body_end_section_portrait,
body_end_section_columns,或body_end_section_columns_landscape代替。但是,这些函数都不接受margins参数。
当我尝试强制body_end_section_columns_landscape接受margins带有以下代码的参数时,出现以下错误:
my_doc %<>%
body_end_section_columns_landscape(
widths = c(4.75, 4.75),
space = 0.5,
sep = FALSE,
w = 8.5,
h = 11,
margins = c(top = 0.5, bottom = 0.5, left = 0.5, right = 0.5)
)
Error in body_end_section_columns_landscape(., widths = c(4.75, 4.75), :
unused argument (margins = c(top = 0.5, bottom = 0.5, left …Run Code Online (Sandbox Code Playgroud) 我正在尝试将此.csv 文件读入 R。当我使用 read.csv 时,我要么收到与 row.names 相关的错误,要么列名称偏离其原始列。根据这篇文章,我认为问题与每行末尾有一个额外的逗号有关。我在上一个问题的回答中找不到的是如何去掉行尾逗号。
我的解决方法是执行以下操作:
pmr <-read.csv("pubmed_result.csv", header = T, row.names = NULL)
colnames(pmr) <- c(colnames(pmr)[2:ncol(pmr)], "blank")
pmr <- pmr[1:ncol(pmr)-1]
Run Code Online (Sandbox Code Playgroud)
这提供了所需的结果,但似乎有点不优雅。有没有办法让 read.csv 或 read.table 忽略最后一个逗号?或者有没有办法使用 gsub 来修复 csv?
我正在尝试搜索数据库,然后"derived_name"在下面的可重现示例中使用从原始搜索派生的名称标记输出.我正在使用dplyr管道%>%,我在准静态评估和/或非标准评估方面遇到了麻烦.具体而言,使用在最终函数中count_colname派生自的字符对象无法对数据帧进行子集化."derived_name"top_n()
search_name <- "derived_name"
set.seed(1)
letrs <- letters[rnorm(52, 13.5, 5)]
letrs_count.df <- letrs %>%
table() %>%
as.data.frame()
count_colname <- paste0(search_name, "_letr_count")
colnames(letrs_count.df) <- c("letr", count_colname)
letrs_top.df <- letrs_count.df %>%
top_n(5, count_colname)
identical(letrs_top.df, letrs_count.df)
# [1] TRUE
Run Code Online (Sandbox Code Playgroud)
根据这个讨论,我认为上面的代码可行.而这篇文章引起我去尝试top_n_(),这似乎不存在.
我正在学习vignette("programming")哪个有点过头了.这篇文章让我尝试了!! sym()语法,这有效,但我不明白为什么!帮助理解为什么下面的代码工作将非常感激.谢谢.
colnames(letrs_count.df) <- c("letr", count_colname)
letrs_top.df <- letrs_count.df %>%
top_n(5, (!! sym(count_colname)))
letrs_top.df
# letr derived_name_letr_count
# 1 l 5 …Run Code Online (Sandbox Code Playgroud) 我想使用数据帧的一列中的字符串作为搜索字符串,逐行搜索sub数据帧的另一列中的字符串。我想使用 来做到这一点dplyr::mutate。我已经找到了一种使用匿名函数 和 来做到这一点的方法apply,但我觉得apply没有必要,而且我的实现方式一定是出了问题mutate。(是的,我知道这tools::file_path_sans_ext可以给我最终结果而不需要使用 mutate ;我只是想了解如何使用mutate。)
这是我认为应该有效但无效的代码:
files.vec <- dir(
dir.target,
full.names = T,
recursive = T,
include.dirs = F,
no.. = T
)
library(tools)
files.paths.df <- as.data.frame(
cbind(
path = files.vec,
directory = dirname(files.vec),
file = basename(files.vec),
extension = file_ext(files.vec)
)
)
library(tidyr)
library(dplyr)
files.split.df <- files.paths.df %>%
mutate(
no.ext = function(x) {
sub(paste0(".", x["extension"], "$"), "", x["file"])
}
)
| Error in mutate_impl(.data, dots) …Run Code Online (Sandbox Code Playgroud) 我有这段代码,它检查特定驱动器上的剩余磁盘空间,然后运行一组命令。
if [ "$(echo "$(df -h | awk '$1 == "drive_name" {print $4}' | sed 's/[T]//') >= 0.2" | bc)" -eq 1 ]; then
<run_these_commands>;
else
<run_other_commands>;
fi
Run Code Online (Sandbox Code Playgroud)
它有效,但是[] test一团糟。有一个更好的方法吗?
我第一次使用getopts和case...esac。我已经看到教程和问题具有许多不同模式的默认/全能选项:?, *, \?, [?]。它们的功能似乎都一样,你可以看到如果你在这个脚本中改变它们的顺序:
#!/bin/bash
set -e
set -u
set -o pipefail
while getopts ":d:l:h:" opt; do
case $opt in
d) echo getopts saw $opt with value $OPTARG ;;
l) echo getopts saw $opt with value $OPTARG ;;
h) echo getopts saw $opt with value $OPTARG ;;
:) echo "getopts saw $opt with value $OPTARG and went to :" ;;
*) echo "getopts saw $opt with value $OPTARG and went to …Run Code Online (Sandbox Code Playgroud)