小编ms6*_*609的帖子

R 矩阵中哪些行/列与其他行/列重复?

我有一个具有许多行和列的矩阵

x <- matrix(c(1, 1, 3, 3, 55, 55, 1, 3, 3, 1,
              1, 1, 3, 3, 55, 55, 1, 3, 9, 1), ncol = 2)
Run Code Online (Sandbox Code Playgroud)

我的问题

在每组重复行(即每组相同的行)中,我希望标识第一行索引并将其分配给该组中的所有出现情况。例如,1两列(第 1、2、7、10 行)中都有多个重复行。在每一行上,我想要第一行索引,即 1。

x
#       [,1] [,2]
#  [1,]    1    1 # first row of 1-1. Assign its row index, 1, to all 1-1 rows
#  [2,]    1    1
#  [3,]    3    3 # first row of 3-3. Assign its row index, 3, to all 3-3 rows
# …
Run Code Online (Sandbox Code Playgroud)

r matrix duplicates

19
推荐指数
4
解决办法
1411
查看次数

Gitbook章目目录不按字母顺序排列

我正在使用bookdown从R markdown文件(即.Rmd)创建HTML gitbook ,默认选项是split_bib = TRUE在每章末尾生成参考书目,以及本书末尾的完整参考书目.

书末书目按字母顺序排列,但章末书目却没有.(这是一个例子).

如何按字母顺序排列所有参考列表?

html r bibliography knitr bookdown

13
推荐指数
1
解决办法
225
查看次数

在Windows上使用clang编译R包

我在 Windows 10 上开发包含 C++ 代码的 R 包。

我想检查内存分配错误。听起来最简单的路径是使用 clang++ 和选项-fsanitize=address

如何配置 R 以使 clang 成为默认编译器?

到目前为止我所做的:

  • 安装LLVM,将二进制文件添加到路径中

  • 在 中设置以下选项~/.R/makevars

CC = "path/to/llvm/bin/clang"
CXX = "path/to/llvm/bin/clang++"
CXX11 = "path/to/llvm/bin/clang++"
CXX14 = "path/to/llvm/bin/clang++"
CXXFLAGS = -O1 -g -fsanitize=address -fno-omit-frame-pointer
PKG_CXXFLAGS = -Og -fsanitize=address
LDFLAGS = -fsanitize=address
Run Code Online (Sandbox Code Playgroud)
  • 在 RStudio 中,运行devtools::install(). 我懂了:
-  installing *source* package 'TreeTools' ...
   ** using staged installation
   ** libs
   "path/to/llvm/bin/clang++" -std=gnu++14 -I"C:/PROGRA~1/R/R-40~1.0/include" -DNDEBUG  -I'C:/Users/ms609/Documents/R/win-library/4.0/Rcpp/include'     -Og -Wall -pedantic -mtune=generic -fsanitize=address -Wno-deprecated-declarations …
Run Code Online (Sandbox Code Playgroud)

c++ r clang++ r-package

6
推荐指数
0
解决办法
1183
查看次数

R 使用 mingw_32 为 64 位架构编译包

定期——我想每当我更新 R——我在我的 64 位 Windows 机器上从源代码安装包时遇到问题。

今天我正在尝试使用devtools::install_github(). 安装在我的笔记本电脑上进行得很好,但我的台式机上没有,它可以在 下安装包*** arch - i386,但是在 下*** arch - x64,它报告错误消息

C:/PROGRA~1/R/R-34~1.4/bin/x64/R.dll:文件无法识别:文件格式无法识别

导致错误的命令是

C:/Rtools/mingw_32/bin/g++ -shared -s -static-libgcc -o PACKAGENAME.dll [...]

我相信错误是因为 R 正在使用 mingw_32 来尝试编译 64 位包。问题是,我在哪里可以告诉 R 使用 mingw_64?我已经检查了所有我能记得的地方:

  • R-3.4.4/etc/x64/Makeconf 状态 BINPREF ?= c:/Rtools/mingw_64/bin/
  • 我的系统PATH(在 R 中使用 验证)在Sys.getenv('PATH')mingw_32 之前包含 mingw_64。

R 必须寻找其他地方来决定使用哪个编译器......但在哪里?

packages r

5
推荐指数
1
解决办法
1379
查看次数

使用 roxygen2 在单个文档对象中记录多个数据集

我正在寻找相当于@describeIn它允许我为多个 R 数据对象创建单个文档对象。

\n\n

我本来希望这样的事情:

\n\n
#\' Tree Distances\n#\' \n#\' These datasets contain the distances between sets\n#\' of 10-tip, 11-tip and 12-tip trees.\n#\' \n#\' @name treeDistances\n#\' @keywords datasets\n"treeDistances10"\n"treeDistances11"\n"treeDistances12"\n
Run Code Online (Sandbox Code Playgroud)\n\n

将生成一个适用于所有三个treeDistances##对象的手册页,类似于使用@describeIn treeDistances Distances between 11-tip trees.

\n\n

我注意到添加@aliases treeDistance11 treeDistance12文档页面与数据对象相关联,但没有引用“使用”部分 \xe2\x80\x93 中的对象,但我相信有更合适的方法来执行此操作?

\n

documentation r dataset documentation-generation roxygen2

5
推荐指数
1
解决办法
628
查看次数

仅将 R 方法应用于某个类的*矩阵*

我正在开发的一个包包含一个R 方法,并且有一个我希望仅应用于数字矩阵的函数。

我的函数将调用一个需要数字矩阵作为其输入的 C 函数。我想让其他包的作者很容易为(比如)数字向量或字符矩阵编写单独的处理程序,而不必编辑我包中的函数。

为了一个简单的例子,假设我希望函数向矩阵添加一个:

AddOne <- function (x) UseMethod('AddOne')
AddOne.[numeric-AND-matrix] <- function (x) add_one_in_c(x)

AddOne(1) # Should report "No applicable method"
AddOne(matrix("one")) # Should report "No applicable method"
AddOne(matrix(1)) # Should send the matrix to add_one_in_c()
Run Code Online (Sandbox Code Playgroud)

只看x是数字还是矩阵太笼统了:

AddOne <- function (x) UseMethod('AddOne')
AddOne.numeric <- function (x) message("X is numeric, but may not be a matrix")
AddOne.matrix <- function (x) message("X is a matrix, but may not be numeric")
Run Code Online (Sandbox Code Playgroud)

我一直不鼓励将其inherits用于此类目的:

AddOne …
Run Code Online (Sandbox Code Playgroud)

methods r

5
推荐指数
1
解决办法
82
查看次数

将 valgrind 与“R CMD 检查”一起使用

我想在我的包的测试、示例和小插图上运行 valgrind。各种消息来源暗示这样做的方法应该是:

R CMD build my-pkg
R CMD check --use-valgrind my-pkg_0.0.tar.gz
Run Code Online (Sandbox Code Playgroud)

R CMD check似乎运行良好,但没有显示 valgrind 输出的证据,即使在设置环境变量之后也是如此VALGRIND_OPTS: --memcheck:leak-check=full。我发现消息来源暗示 R 需要交互运行 valgrind 才能显示输出,但R -d CMD check(或R -d "CMD check") 似乎是错误的格式。

R -d "valgrind --tool=memcheck --leak-check=full" --vanilla < my-pkg.Rcheck/my-pkg-Ex.R确实有效,但仅限于示例文件;我看不到一种简单的方法来针对我的小插图运行它并进行测试。

通过 valgrind 运行所有相关脚本的最佳方法是什么?无论如何,我们的目标是将其集成到 GitHub 操作脚本中。

unit-testing valgrind r package

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

什么时候值得在 R 函数中使用“remove”?

在决定是否remove在函数中不再使用一个变量时,我应该考虑哪些因素?

这是一个简单的例子:

DivideByLower <- function (a, b) {
  if (a > b) {
    tmp <- a
    a <- b
    b <- tmp
    remove(tmp) # When should I include this line?
  }

  # Return:
  a / b
}
Run Code Online (Sandbox Code Playgroud)

我知道tmp当函数完成执行时它将被删除,但我是否应该担心提前删除它?

performance r function

3
推荐指数
1
解决办法
562
查看次数

`UseMethod()` 与 `inherits()` 在 R 中确定对象的类

如果我需要根据它们的类以不同的方式处理 R 对象,我可以在单个函数中使用ifelse

foo <- function (x) {
  if (inherits(x, 'list')) {
    # Foo the list
  } else if (inherits(x, 'numeric')) {
    # Foo the numeric
  } else {
    # Throw an error
  }
}
Run Code Online (Sandbox Code Playgroud)

或者我可以定义一个方法:

foo <- function (x) UseMethod('foo')

foo.list <- function (x) {
  # Foo the list
}
foo.numeric <- function (x) {
  # Foo the numeric
}
Run Code Online (Sandbox Code Playgroud)

每种方法的优点是什么?有性能影响吗?

oop r class

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

如何在PHP脚本生成HTML页面时隐藏shebang

我有一个PHP脚本,旨在从命令行(包括作为CRON作业) Web浏览器运行.

要从命令行运行它,我知道我需要将shebang #!/usr/bin/php 作为文件的第一行.

但是<html>当脚本呈现为HTML网页时,此行会出现在元素之前.

将脚本呈现为HTML时,如何隐藏shebang?

php

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