小编Jos*_*osh的帖子

如何避免评估和分析?

我编写了一个函数,该函数可获取包含其他函数脚本的文件,并将这些函数存储在替代环境中,以免它们干扰整个全局环境。该代码有效,但包含以下三个实例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)

eval r

14
推荐指数
1
解决办法
212
查看次数

安装devtools时发生错误“跳过pax全局扩展头”

我正在尝试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)

r devtools

7
推荐指数
0
解决办法
494
查看次数

如何从 bash 脚本中将 stdout 和 stderr 重定向到文件?

我想在 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每次调用脚本时使用?谢谢

bash stdout stderr

7
推荐指数
2
解决办法
3059
查看次数

isTRUE 和 isFALSE 在 dplyr mutate 函数中未按预期工作

我想检查数据帧的两列中的值是否不匹配,并使用此信息创建一个新列。我想使用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)

r dplyr

6
推荐指数
1
解决办法
662
查看次数

如何在官员中格式化页边距?

我正在尝试使用officer. 的文档(v0.3.5,2019年6月23日)指出,body_end_section并且body_default_section被弃用,建议使用body_end_section_continuousbody_end_section_landscapebody_end_section_portraitbody_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)

r officer

5
推荐指数
0
解决办法
328
查看次数

行尾的额外逗号导致 read.csv 和 read.table 出错

我正在尝试将此.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?

r read.table read.csv

4
推荐指数
1
解决办法
2216
查看次数

dplyr()中的非标准评估和准范式不符合(天真)预期的工作

我正在尝试搜索数据库,然后"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)

r dplyr non-standard-evaluation tidyeval quasiquotes

4
推荐指数
1
解决办法
305
查看次数

在 mutate 中使用匿名函数

我想使用数据帧的一列中的字符串作为搜索字符串,逐行搜索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)

r

2
推荐指数
1
解决办法
2797
查看次数

检查可用驱动器空间的 Bash 命令(“检查十进制数的值”)

我有这段代码,它检查特定驱动器上的剩余磁盘空间,然后运行一组命令。

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一团糟。有一个更好的方法吗?

bash

0
推荐指数
1
解决办法
350
查看次数

Case...esac 默认条件

我第一次使用getoptscase...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)

bash

0
推荐指数
1
解决办法
95
查看次数