小编Ari*_*man的帖子

R包开发 - 函数别名

我正在开发一个R包,我想设置一些函数别名,例如,如果我已经定义了一个名为的函数foo,我希望它也可以在bar符号下使用.请注意,我知道@alias标签,但这不是我想要的.我应该创建一个新文件(可能aliases.R)并将所有别名放在那里吗?

r package

25
推荐指数
2
解决办法
2381
查看次数

如何访问R中S4对象的插槽

我正在使用程序上的小波,我使用该程序包wavelets使用该函数创建时间序列的DWT dwt.该函数返回类的对象dwt,这与许多时隙的S4对象:W,V,levels,filter,等.

如何W作为向量访问?

r wavelet slots s4

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

查看R包的来源

有没有一种简单的方法可以在交互式环境中查看R包的源代码(或包中的方法)?

r r-faq

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

自动记录数据集

我现在正在开展一个项目,我从一堆不同的来源慢慢积累了一堆不同的变量.作为一个有点聪明的人,我在主"original_data"目录下为每个子目录创建了一个不同的子目录,并包含一个.txt文件,其中包含我从中获取数据的URL和其他描述符.作为一个不够聪明的人,这些.txt文件没有结构.

现在,我面临着编译一个记录所有不同数据源的方法部分的任务.我愿意经历并为数据添加结构,但后来我需要找到或构建一个报告工具来扫描目录并提取信息.

这似乎ProjectTemplate已经存在,但我似乎无法在那里找到那种功能.

这样的工具存在吗?

如果没有,应该考虑哪些因素才能提供最大的灵活性?一些初步想法:

  1. 应该使用标记语言(YAML?)
  2. 应扫描所有子目录
  3. 为了便于(2),应该使用数据集描述符的标准扩展
  4. 重要的是,为了使这个最有用,需要有一些方法来将变量描述符与它们最终采用的名称进行匹配.因此,要么所有重命名变量都必须在源文件中完成,而不是在清理步骤中完成(不太理想),文档引擎必须完成一些代码解析以跟踪变量名称更改(呃!),或者某些应该使用更简单的混合,例如允许在标记文件中指定变量重命名.
  5. 理想情况下,报告也会被模板化(例如"我们从[日期]上的[dset]数据集中提取[var]变量."),并且可能与Sweave相关联.
  6. 该工具应该足够灵活,不会过于繁琐.这意味着最小文档只是一个数据集名称.

yaml metadata r roxygen

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

如何调试非导出函数?

有关如何查看函数源代码的权威指南,但是如何调试未从包中导出的函数,而无需手动单步执行您找到的源代码?

library(plm)
> predict.plm
Error: object 'predict.plm' not found
> plm:::predict.plm
function (object, newdata = NULL, ...) 
{
    tt <- terms(object)
    if (is.null(newdata)) {
        result <- fitted(object, ...)
    }
    else {
        Terms <- delete.response(tt)
        m <- model.frame(Terms, newdata)
        X <- model.matrix(Terms, m)
        beta <- coef(object)
        result <- as.numeric(crossprod(beta, t(X)))
    }
    result
}
<environment: namespace:plm>
> debugonce("predict.plm")
Error in debugonce("predict.plm") : could not find function "predict.plm"
> debugonce("plm:::predict.plm")
Error in debugonce("plm:::predict.plm") : 
  could not find function "plm:::predict.plm"
Run Code Online (Sandbox Code Playgroud)

debugging r

21
推荐指数
2
解决办法
695
查看次数

如何处理R中的多种缺失?

许多调查都有不同类型缺失的代码.例如,代码簿可能表明:

0-99数据

-1没问的问题

-5不知道

-7拒绝回应

-9模块没问

Stata有一个很好的设施来处理这些多种缺失,因为它允许你分配一个通用的.丢失数据,但也允许更具体的缺失类型(.a,.b,.c,...,.z).所有查看缺失的命令都会报告所有缺失条目的答案,但是您可以稍后对各种缺失进行排序.当您认为拒绝回应对归责策略的影响与未提出的问题不同时,这尤其有用.

我从未在R中遇到过这样的设施,但我真的很想拥有这种能力.有没有办法标记几种不同类型的NA?我可以想象创建更多的数据(包含缺失类型的长度为nrow(my.data.frame)的向量,或者哪些行具有哪种类型的缺失的更紧凑的索引),但这看起来非常笨拙.

r survey missing-data stata data-structures

19
推荐指数
2
解决办法
1376
查看次数

单件读取CSV文件的策略?

我在计算机上有一个中等大小的文件(4GB CSV),没有足够的RAM来读取它(在64位Windows上为8GB).在过去,我只是将它加载到一个集群节点上并将其读入,但我的新集群似乎任意将进程限制为4GB的RAM(尽管硬件每台机器有16GB),所以我需要一个短期修复.

有没有办法将CSV文件的一部分读入R以适应可用的内存限制?这样我一次可以读取文件的三分之一,将其子集化为我需要的行和列,然后在下一个三分之一读取?

感谢评论者指出我可以使用一些大内存技巧读取整个文件: 快速读取非常大的表作为R中的数据帧

我可以想到其他一些解决方法(例如在一个好的文本编辑器中打开,删掉2/3的观察结果,然后加载R),但是如果可能的话我宁愿避免使用它们.

因此,阅读它看起来仍然是现在最好的方法.

r bigdata

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

使用@直接访问S4对象插槽是不好的做法?

这个问题几乎是一个哲学问题:直接使用访问和/或设置S4对象的插槽是不是很糟糕@

我一直被告知这是不好的做法,并且用户应该使用"访问者"S4方法,开发者应该为他们的用户提供这些.但我想知道是否有人知道这背后的真实交易?

这是使用sp包的示例(但可以针对任何S4类进行推广):

> library(sp)
> foo <- data.frame(x = runif(5), y = runif(5), bar = runif(5))
> coordinates(foo) <- ~x+y
> class(foo)
[1] "SpatialPointsDataFrame"
attr(,"package")
[1] "sp"

> str(foo)
Formal class 'SpatialPointsDataFrame' [package "sp"] with 5 slots
  ..@ data       :'data.frame': 5 obs. of  1 variable:
  .. ..$ bar: num [1:5] 0.621 0.273 0.446 0.174 0.278
  ..@ coords.nrs : int [1:2] 1 2
  ..@ coords     : num [1:5, 1:2] 0.885 0.763 0.591 0.709 0.925 ...
  .. …
Run Code Online (Sandbox Code Playgroud)

r s4

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

data.table join然后将列添加到现有data.frame而不重新复制

我有两个data.tables,X(3米行乘500列)和Y(100行乘两列).

set.seed(1)
X <- data.table( a=letters, b=letters, c=letters, g=sample(c(1:5,7),length(letters),replace=TRUE), key="g" )
Y <- data.table( z=runif(6), g=1:6, key="g" )
Run Code Online (Sandbox Code Playgroud)

我想在X上做一个左外连接,我可以做到Y[X]这一点,感谢:

为什么X [Y]连接data.tables不允许完全外连接或左连接?

但我想在X 复制的情况下添加新列X(因为它很大).

显然,像X <- Y[X]作品这样的东西,但除非data.table比我给它的功劳更加明确(并且我非常狡猾地给予它赞美!),我相信这复制了整个X.

X[ , z:= Y[X,z]$z ] 虽然工作正常,但却不能很好地扩展到多个列.

如何将合并的结果以有效的方式(在副本方面和程序员时间方面)存储回保留的data.table中?

join copy r reference data.table

19
推荐指数
2
解决办法
4154
查看次数

为什么R中的"首选"

来自help("'"):

单引号和双引号分隔字符常量.它们可以互换使用,但首选双引号(字符常量使用双引号打印),因此单引号通常仅用于分隔包含双引号的字符常量.

如果它们可以互换,为什么双引号是首选?在我自己的用法中,我还没有找到它们之间的区别.特别令人惊讶的是混合字符向量是允许的:

> c("a",'b',"c")
[1] "a" "b" "c"
Run Code Online (Sandbox Code Playgroud)

编辑

我想在这里问两个问题,我想:

  1. 是否有任何情况'"行为不同?
  2. 如果没有,为什么"按惯例选择首选版本?

到目前为止,答案与(2)有关,但(1)至少与兴趣有关.

string r

18
推荐指数
2
解决办法
323
查看次数