小编Tho*_*P85的帖子

将命名向量添加到列表中

这是非常基本的,但我似乎无法弄明白

假设我有一个变量条目列表:

lst <- list(a=1:4, b=rep('k', 5), c=3)
Run Code Online (Sandbox Code Playgroud)

如果我想用指定的名称添加一个向量,我应该能够通过以下方式这样做:

c(f=1:5, lst)
Run Code Online (Sandbox Code Playgroud)

但是不是创建一个名为'f'的条目,包含1 2 3 4 5,而是创建五个条目(f1-f5),每个条目包含一个数字.

我该如何抑制这种行为?

我知道我可以使用

lst$f <- 1:5
Run Code Online (Sandbox Code Playgroud)

但我想在函数调用中附加列表...

r

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

在列表中获取匹配索引的快捷方法

给定一个a包含不等长度向量的列表和一个b包含来自向量的元素的向量的列表a,我想得到一个等长的向量来b包含匹配a元素的索引b(这是我所知道的一个不好的解释)...

以下代码完成了这项工作:

a <- list(1:3, 4:5, 6:9)
b <- c(2, 3, 5, 8)

sapply(b, function(x, list) which(unlist(lapply(list, function(y, z) z %in% y, z=x))), list=a)
[1] 1 1 2 3
Run Code Online (Sandbox Code Playgroud)

sapply当然,用for循环替换也可以实现相同的目的

问题是这个代码将用于长度大于1000的列表和向量.在现实生活中,该函数大约需要15秒(for循环和for sapply).

有没有人知道如何加快速度,对并行方法安全?我没有看到矢量化方法(我不能用C编程,尽管这可能是最快的).

编辑:

只会强调Aaron使用match()的优雅解决方案,其速度提升1667次(从15到0.009)

我在它上面扩展了一下以允许多个匹配(返回是一个列表)

a <- list(1:3, 3:5, 3:7)
b <- c(3, 5)
g <- rep(seq_along(a), sapply(a, length))
sapply(b, function(x) g[which(unlist(a) %in% x)])
[[1]]
[1] 1 2 3

[[2]]
[1] 2 3
Run Code Online (Sandbox Code Playgroud)

这个的运行时间是0.169,这可能相当慢,但另一方面更灵活

indexing optimization r list vectorization

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

在二维窗口中有效搜索

考虑一个矩阵,每行指定一个二维区域,另一个矩阵指定平面中的点:

xmin <- c(3, 14, 25, 61)
xmax <- c(5, 18, 27, 65)
ymin <- c(33, 12, 83, 2)
ymax <- c(35, 16, 90, 6)
regions <- cbind(xmin, xmax, ymin, ymax)

x <- c(7, 26, 4, 16)
y <- c(4, 85, 30, 13)
points <- cbind(x, y)
Run Code Online (Sandbox Code Playgroud)

获取索引的最快方法是什么regions,其中包含每个点points

我想要实现的一个例子是:

apply(points, 1, function(x){
    which(regions[,'xmin'] < x[1] & regions[,'xmax'] > x[1] & regions[,'ymin'] < x[2] & regions[,'ymax'] > x[2])
})
Run Code Online (Sandbox Code Playgroud)

但是随着两者中的行数regionspoints接近1E5 的行数变得相当慢,我正在寻找一种适当的矢量化方法......

提前致谢...

最佳托马斯 …

r

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

如何实现S4方法的子集替换

我正在编写一个S4类,其中内部数据存储在数据库中,该类主要是用于访问和修改数据库中信息的守门员.这个类必须的方法,如getInfoAgetInfoA<-用于提取和设置的某些信息.

我的问题涉及以下案例:

myObject <- new('myClass', db='path/to/database')
getInfoA(myObject)[1:5] <- letters[1:5]
Run Code Online (Sandbox Code Playgroud)

这里的setter在赋值之前是子集的.通常,当数据存储在标准R结构中时,这会自动解决,但是当数据存储在别处时如何正常处理?[<-R中有一个原语,但我不清楚调度是如何进行的,以及在何处以及如何拦截它......

r s4

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

如何确定以 system(..., wait=FALSE) 启动的进程何时结束

我正在尝试在 R 中设置一个异步 system() 调用。为了使它有用,用户需要一种方法来检查进程是否已经结束。问题是如何测试?在如何运行可执行文件,然后在 Windows 中使用 R 杀死或终止相同的进程时,建议似乎是在 system() 调用之前和之后捕获所有 pid 以获取刚刚启动的进程的 pid (然后可以用来测试它是否已经结束),但这似乎是一种容易出错的方法,而且它依赖于操作系统......

是否有其他方法可以解决此问题(不必涉及 pid)

编辑:这应该用于当前场景:

我正在开发一个 Shiny GUI,它可以处理在 Java 中实现的可能很长时间运行的计算。计算是分批完成的,在这些运行期间,即使 R 空闲,GUI 也被锁定,无法与 R 服务器交互,因为它正在等待 Java 进程完成。我想要一种方法来启动 Java 进程而不是等待它完成(使用 wait=FALSE 参数),而是有一种检查它是否已完成的故障安全方法,因此可以相应地更新 GUI...

r

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

基于另一个向量中的索引组合列表中的元素

给定一个列表(a)和一个长度与a相同的数字向量(b):

a <- list(1, c(3, 7), 5)
b <- c(1,1,2)
Run Code Online (Sandbox Code Playgroud)

如何创建一个长度为max(b)的新列表,其中a中的每个元素都根据b放入相应的索引中,如果出现多次,则组合起来,这样就得到:

[[1]]
[1] 1 3 7

[[2]]
[1] 5
Run Code Online (Sandbox Code Playgroud)

希望这可以非常有效地完成(没有循环),因为我的数据的维度往往非常大......

我很确定有一个明显的解决方案我没想过......

谢谢您的帮助

indexing r list

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

R:在system()中使用wait = FALSE和多行命令

我有一个长期运行的进程(用Java编写),我希望与系统异步运行(...,wait = FALSE).为了能够确定进程何时结束,我想根据在如何确定何时以系统启动进程(...,wait = FALSE)中给出的建议结束后创建文件.问题是,似乎wait参数仅适用于多行系统命令中的最后一行,而我似乎无法找到解决方法.

例:

system('sleep 2')                 # waits 2 seconds before control is returned to the user
system('sleep 2', wait=FALSE)     # control is returned immediately
system('sleep 2; ls', wait=FALSE) # waits 2 seconds before control is returned to the user
Run Code Online (Sandbox Code Playgroud)

我正在运行mac系统btw ...

r

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

获取函数的命名空间

我正在开发一个包,我希望在其中向对象添加编辑历史记录。该包允许其他包注册用于编辑对象的函数。我正在寻找一种方法来记录注册用于编辑的函数的包的版本。

问题是:给定一个函数,如何从导出的位置获取包?我的想法是研究它的搜索路径,但search()只报告当前环境的搜索路径,因此不报告我需要的函数的搜索路径。

非常感谢任何指向其他方法的指示。

获取包的上下文是这样的:

registerFunction <- function(fun) {
  package <- getPackage(fun)  ## This is what I need
  version <- getPackageVersion(package)
  register(fun, package, version)
}
Run Code Online (Sandbox Code Playgroud)

namespaces r

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

标签 统计

r ×8

indexing ×2

list ×2

namespaces ×1

optimization ×1

s4 ×1

vectorization ×1