我有一个具有许多行和列的矩阵
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) 我正在使用bookdown从R markdown文件(即.Rmd)创建HTML gitbook ,默认选项是split_bib = TRUE在每章末尾生成参考书目,以及本书末尾的完整参考书目.
书末书目按字母顺序排列,但章末书目却没有.(这是一个例子).
如何按字母顺序排列所有参考列表?
我在 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)
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) 定期——我想每当我更新 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 必须寻找其他地方来决定使用哪个编译器......但在哪里?
我正在寻找相当于@describeIn它允许我为多个 R 数据对象创建单个文档对象。
我本来希望这样的事情:
\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"\nRun Code Online (Sandbox Code Playgroud)\n\n将生成一个适用于所有三个treeDistances##对象的手册页,类似于使用@describeIn treeDistances Distances between 11-tip trees.
我注意到添加@aliases treeDistance11 treeDistance12文档页面与数据对象相关联,但没有引用“使用”部分 \xe2\x80\x93 中的对象,但我相信有更合适的方法来执行此操作?
我正在开发的一个包包含一个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) 我想在我的包的测试、示例和小插图上运行 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 操作脚本中。
在决定是否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当函数完成执行时它将被删除,但我是否应该担心提前删除它?
如果我需要根据它们的类以不同的方式处理 R 对象,我可以在单个函数中使用if和else:
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)
每种方法的优点是什么?有性能影响吗?
我有一个PHP脚本,旨在从命令行(包括作为CRON作业)或 Web浏览器运行.
要从命令行运行它,我知道我需要将shebang
#!/usr/bin/php
作为文件的第一行.
但是<html>当脚本呈现为HTML网页时,此行会出现在元素之前.
将脚本呈现为HTML时,如何隐藏shebang?