人们用什么技巧来管理交互式R会话的可用内存?我使用下面的函数[根据Petr Pikal和David Hinds在2004年的r-help列表中的帖子]列出(和/或排序)最大的对象,偶尔列出rm()其中的一些.但到目前为止,最有效的解决方案是在具有充足内存的64位Linux下运行.
人们想分享其他任何好玩的伎俩吗?请发一个帖子.
# improved list of objects
.ls.objects <- function (pos = 1, pattern, order.by,
decreasing=FALSE, head=FALSE, n=5) {
napply <- function(names, fn) sapply(names, function(x)
fn(get(x, pos = pos)))
names <- ls(pos = pos, pattern = pattern)
obj.class <- napply(names, function(x) as.character(class(x))[1])
obj.mode <- napply(names, mode)
obj.type <- ifelse(is.na(obj.class), obj.mode, obj.class)
obj.size <- napply(names, object.size)
obj.dim <- t(napply(names, function(x)
as.numeric(dim(x))[1:2]))
vec <- is.na(obj.dim)[, 1] & (obj.type != "function")
obj.dim[vec, 1] <- napply(names, length)[vec]
out <- data.frame(obj.type, …Run Code Online (Sandbox Code Playgroud) 为了分享R的一些提示和技巧,你最有用的功能或技巧是什么?聪明的矢量化?数据输入/输出?可视化和图形?统计分析?特殊功能?互动环境本身?
每个帖子一个项目,我们将看看我们是否通过投票获得了胜利者.
[编辑2008年8月25日]:所以一周后,似乎简单str()赢得了民意调查.因为我想自己推荐一个,这是一个容易接受的答案.
如何删除动物园系列的最后100个元素?
我知道名字[-element]符号,但我不能让它减去一个完整的部分
我正在开发一个想要在Instagram中做一些图像过滤效果的应用程序(android),只是想知道是否有可用的开源库?
该fastmatch包实现的更快版本match的重复匹配(例如,在一个循环中):
set.seed(1)
library(fastmatch)
table <- 1L:100000L
x <- sample(table, 10000, replace=TRUE)
system.time(for(i in 1:100) a <- match(x, table))
system.time(for(i in 1:100) b <- fmatch(x, table))
identical(a, b)
Run Code Online (Sandbox Code Playgroud)
是否有类似的实现%in%可用于加速重复查找?
我有几十个列表,每个列表都是11个数据帧的集合.有些数据框是空的(另一个脚本没有输出任何数据,不是错误).
我需要通过一个函数推送每个列表,但是当它看到一个空数据帧时会扼流.那么我该如何编写一个列表的函数,对每个元素(即数据帧)进行调暗,如果为0,则跳到下一个.
我试过这样的事情:
empties <- function (mlist)
{
for(i in 1:length(mlist))
{
if(dim(mlist[[i]])[1]!=0) return (mlist[[i]])
}
}
Run Code Online (Sandbox Code Playgroud)
但显然,这不起作用.我会在这一点上手动完成,但这需要永远.救命?
我看见:
"为了理解R中的计算,两个口号是有帮助的:
•存在的一切都是一个对象.
•发生的一切都是函数调用."- 约翰钱伯斯
但我刚刚发现:
a <- 2
is.object(a)
# FALSE
Run Code Online (Sandbox Code Playgroud)
实际上,如果变量是纯基类型,那么结果是.object()将为FALSE.所以它不应该是一个对象.
那么R中"存在的一切是一个对象"的真正含义是什么?
在R中使用C++库的最佳方法是什么,希望保留C++数据结构.我不是一个C++用户,所以我不清楚可用方法的相对优点.R-ext手册似乎建议用C语言包装每个C++函数.但是,至少有四到五种其他的C++结合方法.
两种方式是具有类似谱系的包,Rcpp(由多产的overflower Dirk Eddelbuettel维护)和RcppTemplate包(都在CRAN上),两者之间有什么区别?
另一个可用的rcppbind包,声称采用不同的方法绑定C++和R(我不知道如何知道).
CRAN上提供的内联包声称允许内联C/C++我不确定这与内置功能有什么不同,除了允许代码内联w/R.
而且,最后RSwig似乎是在野外,但目前尚不清楚它是如何支持的,因为作者的页面多年来一直没有更新.
我的问题是,这些不同方法的相对优点是什么.哪些是最便携和最强大的,哪些是最容易实现的.如果您打算在CRAN上分发一个包,您会使用哪种方法?
我正在使用R来运行使用时间序列数据的模拟.我一直在使用数组存储数据,但我需要一个内存较少的解决方案,用于在中间步骤存储数据,以便记录进程.我不是程序员所以我想在可能的情况下在多个平台上设置相对容易的东西(Windows,Mac,Linux).我还需要能够直接从R调用数据库,因为现在学习另一种语言是不可行的.理想情况下,我希望能够以类似于数组的方式频繁地读取和写入数据库,但我不知道这是否真实.我很乐意牺牲速度以方便使用,但我愿意努力学习开源解决方案.任何建议,将不胜感激.
如何在 64 位向量中将 NA 值从 Rcpp 传递给 R?
我的第一种方法是:
// [[Rcpp::export]]
Rcpp::NumericVector foo() {
Rcpp::NumericVector res(2);
int64_t val = 1234567890123456789;
std::memcpy(&(res[0]), &(val), sizeof(double));
res[1] = NA_REAL;
res.attr("class") = "integer64";
return res;
}
Run Code Online (Sandbox Code Playgroud)
但它产生
#> foo()
integer64
[1] 1234567890123456789 9218868437227407266
Run Code Online (Sandbox Code Playgroud)
我需要得到
#> foo()
integer64
[1] 1234567890123456789 <NA>
Run Code Online (Sandbox Code Playgroud)