小编Mik*_*gan的帖子

在 Apple 芯片(Big Sur、Monterey、Ventura)上为 Rcpp 和其他工具配置编译器

我正在尝试Rcpp在我的 M1 Mac 上使用 R 中需要的软件包,但在购买这台计算机后我一直无法启动并运行它。我将其更新到蒙特利,希望这能解决一些安装问题,但事实并非如此。我尝试从此页面Rcpp运行检查,但出现以下错误:

\n
> Rcpp::sourceCpp("~/github/helloworld.cpp")\n
Run Code Online (Sandbox Code Playgroud)\n
ld: warning: directory not found for option \'-L/opt/R/arm64/gfortran/lib/gcc/aarch64-apple-darwin20.2.0/11.0.0\'\nld: warning: directory not found for option \'-L/opt/R/arm64/gfortran/lib\'\nld: library not found for -lgfortran\nclang: error: linker command failed with exit code 1 (use -v to see invocation)\nmake: *** [sourceCpp_4.so] Error 1\nclang++ -arch arm64 -std=gnu++14 -I"/Library/Frameworks/R.framework/Resources/include" -DNDEBUG -I../inst/include   -I"/Library/Frameworks/R.framework/Versions/4.1-arm64/Resources/library/Rcpp/include" -I"/Library/Frameworks/R.framework/Versions/4.1-arm64/Resources/library/RcppArmadillo/include" -I"/Users/afredston/github" -I/opt/R/arm64/include   -fPIC  -falign-functions=64 -Wall -g -O2  -c helloworld.cpp -o helloworld.o\nclang++ -arch arm64 -std=gnu++14 -dynamiclib -Wl,-headerpad_max_install_names -undefined dynamic_lookup -single_module -multiply_defined …
Run Code Online (Sandbox Code Playgroud)

macos r build r-package apple-silicon

20
推荐指数
2
解决办法
2万
查看次数

从编译的二进制版本“反向工程”R 包

我所在的组织拥有许多内部 R 包,这些包都是多年前编写的。这些文件存储为.zip在 R 3.x 下的 Windows 上构建的存档。它们无法在不重新构建的情况下加载到 Linux 或 macOS 或 R 4.y 下。不幸的是,我无权访问包源。他们输给了时间……

我想获取这些二进制文件,提取源代码,并根据当前的最佳实践(版本控制、roxygen2testthat等)重新打包它。最好的方法是什么?

我已经通过以下方式解决了其中一个二进制文件:

  1. 手动将加载的命名空间中的对象(导出和内部函数、数据集等)的源代码复制到新.R文件。
  2. 手动将 Roxygen 块添加到.R文件中,以便重现浏览器中显示的帮助页面。

我部分陷入(1),因为某些功能是 S4 通用的。dput(<name>)给出new("standardGeneric", ...)而不是简单的function定义。否则,这个过程相当简单,但非常耗时。

有没有办法以编程方式从 R 包二进制文件“反向工程”源文件,同时正确处理 S4 通用函数、类和方法?

在这个问题得到解决之前,组织中的每个人都将停留在 R 3.6 上。

r r-package

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

有没有一种无需移动设备即可免费设置 GitHub 2FA 的方法?

我目前没有可用的移动设备,但需要切换到 GitHub 的 2FA。

我目前知道的唯一方法是购买 Skype 电话号码并将其用于 SMS 身份验证。但这需要花钱,而且存在我不小心让订阅失效的风险。

是否有不需要移动设备或有效电话号码的免费身份验证方法?

github two-factor-authentication

8
推荐指数
2
解决办法
1177
查看次数

R:尝试在filter.data.frame中使用零长度变量名

我根本不是 R 专家,并且收到此错误:

初始化时出错(...):尝试使用零长度变量名调用:%>% ... filter.data.frame -> filter_rows -> -> 初始化 -> .Call

通过日志,我将其范围缩小到这行代码:

qb_stats_all <- subset(qb_stats_all, select = -c(num)) %>% filter(player != 'Player')
Run Code Online (Sandbox Code Playgroud)

这是之前的完整代码:

library(dplyr)
library(htmltab)
    
# Set earliest quarterback draft year
beginning_qb_year <- 1985

# Set most recent quarterback draft year
ending_qb_year <- 2020

# Scrape NFL quarterback career data
url_start <- paste0('https://www.pro-football-reference.com/play-index/psl_finder.cgi?request=1&match=combined&year_min=', beginning_qb_year, '&year_max=2020&season_start=1&season_end=-1&pos%5B%5D=qb&draft_year_min=1936&draft_year_max=2020&draft_slot_min=1&draft_slot_max=500&draft_pick_in_round=pick_overall&conference=any&draft_pos%5B%5D=qb&draft_pos%5B%5D=rb&draft_pos%5B%5D=wr&draft_pos%5B%5D=te&draft_pos%5B%5D=e&draft_pos%5B%5D=t&draft_pos%5B%5D=g&draft_pos%5B%5D=c&draft_pos%5B%5D=ol&draft_pos%5B%5D=dt&draft_pos%5B%5D=de&draft_pos%5B%5D=dl&draft_pos%5B%5D=ilb&draft_pos%5B%5D=olb&draft_pos%5B%5D=lb&draft_pos%5B%5D=cb&draft_pos%5B%5D=s&draft_pos%5B%5D=db&draft_pos%5B%5D=k&draft_pos%5B%5D=p&c5val=1.0&order_by=pass_att&offset=')

offset_seq <- seq(0, 500, 100)
qb_stats_all <- data.frame()

for (url_end in offset_seq) {
  
  print(paste0('Scraping from QB #', url_end, '!'))
  url <- paste0(url_start, url_end) …
Run Code Online (Sandbox Code Playgroud)

r dataframe

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

R 中子子列表元素的向量化替换

我有一个有点复杂的数据结构(嵌套列表)y,定义为:

x <- list(
  list(1, "a", 2, "b", 0.1),
  list(3, "c", 4, "d", 0.2),
  list(5, "e", 6, "f", 0.3)
)
y <- rep(list(x), 10)
Run Code Online (Sandbox Code Playgroud)

我还有一个数据框df,定义为:

df <- data.frame(
  x1 = c( 0.33, 1.67, -0.62, -0.56,  0.17, 0.73,  0.59,  0.56, -0.22, 1.49),
  x2 = c(-0.82, 1.22,  0.65,  0.54, -2.26, 1.21, -0.44, -0.92, -0.56, 0.50),
  x3 = c(-0.16, 0.49, -0.82, -0.71,  0.13, 1.22,  1.23, -0.01, -1.11, 0.97)
)
Run Code Online (Sandbox Code Playgroud)

其中列名并不重要。

我想将所有和替换y[[i]][[j]][[5]]为。我的 Python/Julia 大脑在循环中工作得最好,因此我通过循环,然后循环 的元素(每个 的副本)来完成此操作,如下所示:df[[i, j]] …

loops r vectorization nested-lists

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

使用“bquote”(或替代方法)从符号构造函数

假设我有一个代表函数名称的“symbol”类型的对象。例如:

nm <- quote(mean)
Run Code Online (Sandbox Code Playgroud)

我想构造一个函数f,其主体使用由符号 命名的函数nm。例如:

f <- function(x, do = c("something", "nothing")) {
  switch(match.arg(do), something = mean(x), nothing = x)
}
Run Code Online (Sandbox Code Playgroud)

我想以相同的方式构造这个函数,这意味着我不会满意以下方法:

factory <- function(name) {
  func <- match.fun(name)
  function(x, do = c("something", "nothing")) {
    switch(match.arg(do), something = func(x), nothing = x)
  }
}
g <- factory(nm)
Run Code Online (Sandbox Code Playgroud)

因为身体g不是body(f),环境g也不是environment(f)

我考虑过的一种方法是bquote

h <- eval(bquote({
  function(x, do = c("something", "nothing")) {
    switch(match.arg(do), …
Run Code Online (Sandbox Code Playgroud)

r metaprogramming function

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

如何向量化此 sapply 调用中的循环?

我发现 R 代码中最昂贵的部分是以下sapply调用:

L <- 2000
score <- sample(1:3, L, replace = TRUE)
d <- c(0, -1, 0.5)
sapply(1:L, function(i) sum(d[1:score[i]]))
Run Code Online (Sandbox Code Playgroud)

d该调用获取从索引 1 到索引 的向量的总和score[i],循环遍历变量中的每个元素score。挑战在于该代码作为优化例程的一部分进行评估并运行很多很多次。

我正在尝试以矢量化方式执行相同的计算,但有点困难。我想我可以创建一个这样的矩阵:

d.mat <- matrix(rep(d, L), nrow = L, byrow = TRUE)
Run Code Online (Sandbox Code Playgroud)

然后以某种方式计算rowSums(d.mat)从第 1 列到score[i]row 中的列i。有谁知道有一种方法可以在不循环的情况下做到这一点?sapply我想,如果可能的话,考虑到rowSums以下基准中的相对速度,这将比 快得多:

library(microbenchmark)
microbenchmark(sapply(1:L, function(i) sum(d[1:score[i]])), 
               rowSums(d.mat),
               times = 100)
Run Code Online (Sandbox Code Playgroud)

或者也许有人看到了更好的第三种选择。

r

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

如何有条件地从另一个包中为 S3 泛型提供 S3 方法?

我正在制作一个数据操作包,它在幕后使用了一些其他库。假设我的数据总是有一个类"custom",并且我有一个custom_select()选择某些列的函数。

\n

我希望我的包具有很少的依赖项,但也具有与dplyr. 由于多个dplyr函数是泛型,因此我可以对不同的输入类型使用相同的函数名称。在我的情况下,我可以创建一个方法select.custom(),以便用户可以传递一个data.frame或一个custom对象select(),并且两者都可以工作。

\n

现在根据我的理解,这需要放入,dplyr因为Imports我需要访问它的select()泛型。我想避免这样做,因为我想限制硬依赖项的数量。

\n

我想到的场景是:

\n
    \n
  • 无论如何,用户已经加载dplyr,然后他们可以使用select()类的数据custom,它应该可以工作
  • \n
  • 用户没有dplyr安装/加载,我不想强​​迫他们拥有它,所以他们可以使用该功能custom_select()
  • \n
\n

理想情况下,我想把它放进dplyrSuggests,这样它就不是绝对必要的,但如果用户有的话它会添加一些东西。

\n
\n

例子

\n

custom.R

\n
#\' @export\n#\' @importFrom dplyr select\ncustom_select <- function(data, select) {\n  print("Hello, world!")\n}\n\n#\' @export\nselect.custom <- custom_select\n
Run Code Online (Sandbox Code Playgroud)\n

NAMESPACE

\n
# Generated by …
Run Code Online (Sandbox Code Playgroud)

r r-s3 r-package

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

R 更新后,dir() 和 list.files() 无法列出包含东亚字符的文件名

dir()list.files()列出 R 版本 4.2.3 中的所有文件名,但不列出 R 版本 4.3.2 中的所有文件名。

R版本4.2.3

版本4.2.3

R版本4.3.2

版本4.3.2

r

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

R 多元插值 - chebpol 包的替代方案

chebpol包已存档在 CRAN 上,因此我正在寻找 chebpol::ipol(..., method = "polyharmonic").

我正在尝试在四维、规则、均匀网格上插入(和推断)一个函数,但缺少一些点。上面提到的chebpol::ipol函数非常适合:

known <- data.table::data.table(
  a = c(1, 1, 1, 1, 2, 2, 2, 2),
  b = c(1, 1, 2, 2, 1, 1, 2, 2),
  c = c(1, 1, 2, 3, 2, 2, 3, 4),
  d = c(1, 2, 3, 4, 1, 2, 3, 4)
)
known[, score := a + b + c + d] # example values

f <- chebpol::ipol(
  val = known[, score], 
  knots = t(as.matrix(known[, …
Run Code Online (Sandbox Code Playgroud)

r

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

如何在 R 中 list.files() 直到 n 层深子目录

我有一个非常复杂的文件夹组织,这是它的简化版本。

       |--Folder0 --- Folder0.1
       |
home---|--Folder1 --- Folder1.1 --- Folder1.2
       |
       |--Folder2 --- Folder2.1
Run Code Online (Sandbox Code Playgroud)

我想列出第二级文件夹(Folder0.1、Folder1.1、Folder2.1)中的所有 .xlsx 文件。

非常感谢任何帮助。

请不要想当然地认为文件夹的名称。只是为了简单起见,我这样称呼它们。他们的名字是随机的。

r

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

R 中的“rexp(1000, 1)”和“replicate(1000, rexp(1,1))”有什么区别?

我正在尝试使用参数为 1 的指数分布生成 1000 个数字。

将种子值设置为 1 后,我尝试了rexp(1000, 1)replicate(1000, rexp(1, 1)),但是得到的两个向量的中位数不同。

我预计这两个表达式生成的向量是相同的,因为它们都是从相同种子值下的相同指数分布中采样的。

rexp(1000, 1)和 和有什么区别replicate(1000, rexp(1, 1))?在实践中我应该使用哪个?

这是我尝试过的代码:

> options(digits = 2)  
> set.seed(1)
> 
> a <- rexp(1000, 1)   
> b <- replicate(1000, rexp(1, 1))
> 
> median(a)   
[1] 0.73   
> median(b)   
[1] 0.68
Run Code Online (Sandbox Code Playgroud)

simulation statistics r replicate exp

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