我正在开发一个R包,我想设置一些函数别名,例如,如果我已经定义了一个名为的函数foo,我希望它也可以在bar符号下使用.请注意,我知道@alias标签,但这不是我想要的.我应该创建一个新文件(可能aliases.R)并将所有别名放在那里吗?
我正在使用程序上的小波,我使用该程序包wavelets使用该函数创建时间序列的DWT dwt.该函数返回类的对象dwt,这与许多时隙的S4对象:W,V,levels,filter,等.
如何W作为向量访问?
我现在正在开展一个项目,我从一堆不同的来源慢慢积累了一堆不同的变量.作为一个有点聪明的人,我在主"original_data"目录下为每个子目录创建了一个不同的子目录,并包含一个.txt文件,其中包含我从中获取数据的URL和其他描述符.作为一个不够聪明的人,这些.txt文件没有结构.
现在,我面临着编译一个记录所有不同数据源的方法部分的任务.我愿意经历并为数据添加结构,但后来我需要找到或构建一个报告工具来扫描目录并提取信息.
这似乎ProjectTemplate已经存在,但我似乎无法在那里找到那种功能.
这样的工具存在吗?
如果没有,应该考虑哪些因素才能提供最大的灵活性?一些初步想法:
有关如何查看函数源代码的权威指南,但是如何调试未从包中导出的函数,而无需手动单步执行您找到的源代码?
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) 许多调查都有不同类型缺失的代码.例如,代码簿可能表明:
0-99数据
-1没问的问题
-5不知道
-7拒绝回应
-9模块没问
Stata有一个很好的设施来处理这些多种缺失,因为它允许你分配一个通用的.丢失数据,但也允许更具体的缺失类型(.a,.b,.c,...,.z).所有查看缺失的命令都会报告所有缺失条目的答案,但是您可以稍后对各种缺失进行排序.当您认为拒绝回应对归责策略的影响与未提出的问题不同时,这尤其有用.
我从未在R中遇到过这样的设施,但我真的很想拥有这种能力.有没有办法标记几种不同类型的NA?我可以想象创建更多的数据(包含缺失类型的长度为nrow(my.data.frame)的向量,或者哪些行具有哪种类型的缺失的更紧凑的索引),但这看起来非常笨拙.
我在计算机上有一个中等大小的文件(4GB CSV),没有足够的RAM来读取它(在64位Windows上为8GB).在过去,我只是将它加载到一个集群节点上并将其读入,但我的新集群似乎任意将进程限制为4GB的RAM(尽管硬件每台机器有16GB),所以我需要一个短期修复.
有没有办法将CSV文件的一部分读入R以适应可用的内存限制?这样我一次可以读取文件的三分之一,将其子集化为我需要的行和列,然后在下一个三分之一读取?
感谢评论者指出我可以使用一些大内存技巧读取整个文件: 快速读取非常大的表作为R中的数据帧
我可以想到其他一些解决方法(例如在一个好的文本编辑器中打开,删掉2/3的观察结果,然后加载R),但是如果可能的话我宁愿避免使用它们.
因此,阅读它看起来仍然是现在最好的方法.
这个问题几乎是一个哲学问题:直接使用访问和/或设置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) 我有两个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中?
来自help("'"):
单引号和双引号分隔字符常量.它们可以互换使用,但首选双引号(字符常量使用双引号打印),因此单引号通常仅用于分隔包含双引号的字符常量.
如果它们可以互换,为什么双引号是首选?在我自己的用法中,我还没有找到它们之间的区别.特别令人惊讶的是混合字符向量是允许的:
> c("a",'b',"c")
[1] "a" "b" "c"
Run Code Online (Sandbox Code Playgroud)
编辑
我想在这里问两个问题,我想:
'和"行为不同?"按惯例选择首选版本?到目前为止,答案与(2)有关,但(1)至少与兴趣有关.