小编Ari*_*man的帖子

只读取R中Stata .DTA文件的一部分

如果在某处有一个简单的答案,我会提前道歉.这似乎是那样的事情,但我似乎无法通过搜索SO或谷歌搜索在帮助文件中找到它.

我现在正在使用几个GB的数据集.它足以适应我有权访问的其中一个集群节点的内存,但需要花费相当多的时间来加载.对于使用此数据的许多调试/编程活动,我不需要加载整个文件,只需要在前几千个观察点上有一个数据集来测试代码.我当然可以只读取整个文件和子集,但我想知道是否有办法告诉read.dta()只读前N行?这当然要快得多.

我也可以使用像.csv这样的正确格式,然后使用read.csv()'s nrows参数,但是我会丢失Stata数据集中的因子标签(并且必须从其他人的代码中重新创建相当多的GB数据.这个项目.因此首选.dta文件的直接解决方案.

r processing-efficiency stata

9
推荐指数
2
解决办法
1689
查看次数

R相当于Stata的`compress`命令?

Stata有一个命令compress,可以查看所有数据行,并尝试将每个数据行强制转换为最有效的格式.例如,如果在data.frame中将一堆整数存储为字符向量,则会将其强制转换为整数.

我可以想象一下如何在R中编写这样的函数,但它是否已经存在?

r

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

与否定相匹配

这很简单,但我似乎找不到它.我知道R有一个否定的版本%in%返回"不在." 显然我可以使用!(x %in% y),但语言包含一个已经否定的构造,我想使用它,goshdarnit.

那么功能是什么?搜索以及%nin%%notin%所有的失败.

如果您!(x %in% y)使用以下示例数据对您的答案进行基准测试,则可以为您提供奖励互联网:

x <- sample( sample(letters,5), 10^3, replace=TRUE)
y <- sample( letters, 10^5, replace=TRUE)
Run Code Online (Sandbox Code Playgroud)

r

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

复制列表以创建列表列表

我正在尝试使用以下(嵌套)结构创建一个列表:

l <- list()
for(i in seq(5)) l[[i]] <- list(a=NA,b=NA)
> str(l)
List of 5
 $ :List of 2
  ..$ a: logi NA
  ..$ b: logi NA
 $ :List of 2
  ..$ a: logi NA
  ..$ b: logi NA
 $ :List of 2
  ..$ a: logi NA
  ..$ b: logi NA
 $ :List of 2
  ..$ a: logi NA
  ..$ b: logi NA
 $ :List of 2
  ..$ a: logi NA
  ..$ b: logi NA
Run Code Online (Sandbox Code Playgroud)

我想通过rep或类似的方式做到这一点,因为我正在创建一大堆空白列表,我将在后面填写.(我知道我可以通过引用其下一个索引来扩展列表,但是索引两深时不起作用).

我认为这对此rep …

r list nested-lists

9
推荐指数
2
解决办法
3351
查看次数

如何在xtable.table输出中获取dimnames?

我想在xtable输出中标注尺寸.但是,xtable即使我手动指定它们,表方法也不会输出维度标签table:

set.seed(10)
d <- data.frame(x=sample(1:4),y=sample(1:4))
tb <- with(d, table(d,dnn=c("Xs","Ys")))
> tb
   Ys
Xs  1 2 3 4
  1 0 0 0 1
  2 0 1 0 0
  3 1 0 0 0
  4 0 0 1 0
> xtable(tb)
% latex table generated in R 2.15.1 by xtable 1.7-0 package
% Tue Oct  9 09:06:10 2012
\begin{table}[ht]
\begin{center}
\begin{tabular}{rrrrr}
  \hline
 & 1 & 2 & 3 & 4 \\ 
  \hline
1 &   0 & …
Run Code Online (Sandbox Code Playgroud)

r xtable

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

输入S4对象

一个人怎么会成为dput()S4对象?我试过这个

require(sp)
require(splancs)
plot(0, 0, xlim = c(-100, 100), ylim = c(-100, 100))
poly.d <- getpoly() #draw a pretty polygon - PRETTY!
poly.d <- rbind(poly.d, poly.d[1,]) # close the polygon because of Polygons() and its kin
poly.d <- SpatialPolygons(list(Polygons(list(Polygon(poly.d)), ID = 1)))
poly.d
dput(poly.d)
Run Code Online (Sandbox Code Playgroud)

请注意,如果我dput()是S4对象,我无法重新构建它.你的意见?

r s4

8
推荐指数
1
解决办法
527
查看次数

为sort.data.frame创建通用/方法一致性的最佳方法?

我终于决定将在互联网上浮动的sort.data.frame方法放入R包中.它只是被要求太多而无法留给临时分发方法.

但是,它使用参数编写,使其与泛型排序函数不兼容:

sort(x,decreasing,...)
sort.data.frame(form,dat)
Run Code Online (Sandbox Code Playgroud)

如果我sort.data.frame改为将减少作为参数sort.data.frame(form,decreasing,dat)并且丢弃减少,那么它就会失去它的简单性,因为你总是必须指定dat=并且不能真正使用位置参数.如果我将其添加到最后sort.data.frame(form,dat,decreasing),则顺序与泛型函数不匹配.如果我希望减少被赶上点`sort.data.frame(form,dat,...),那么当使用基于位置的匹配时,我相信泛型函数会将第二个位置分配给减少,它会得到丢弃.协调这两个功能的最佳方法是什么?

完整的功能是:

# Sort a data frame
sort.data.frame <- function(form,dat){
# Author: Kevin Wright
# http://tolstoy.newcastle.edu.au/R/help/04/09/4300.html
# Some ideas from Andy Liaw
# http://tolstoy.newcastle.edu.au/R/help/04/07/1076.html
# Use + for ascending, - for decending.
# Sorting is left to right in the formula
# Useage is either of the following:
# sort.data.frame(~Block-Variety,Oats)
# sort.data.frame(Oats,~-Variety+Block)

# If dat is the formula, then switch form and dat
  if(inherits(dat,"formula")){
    f=dat
    dat=form
    form=f
  } …
Run Code Online (Sandbox Code Playgroud)

generics methods r class

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

使用强制转换重塑多个变量

我有一个看起来像这样的data.frame:

> head(ff.df)
  .id pio caremgmt prev price surveyNum
1   1   2        2    1     2         1
2   1   2        1    2     1         2
3   1   1        1    2     2         3
4   1   2        2    1     5         4
5   1   1        1    1     3         5
6   1   1        2    2     4         6
Run Code Online (Sandbox Code Playgroud)

我想通过id重塑所有四个非id变量.换句话说,我想要colnames:

surveyNum pio1 pio2 pio3 caremgmt1 caremgmt2 caremgmt3 prev1 prev2 prev3 price1 price2 price3
Run Code Online (Sandbox Code Playgroud)

我可以为一个变量做到这一点:

> cast( ff.df, surveyNum~.id, value=c("pio"))
   surveyNum 1 2 3
1          1 2 2 2 …
Run Code Online (Sandbox Code Playgroud)

r reshape

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

如何通过R中的位置来讨论...论证?

这可能属于"你不能,也没有理由",但我很好奇是否有可能.至少,也许这将是一个有趣的R拼图.

我正在考虑cat总是追加\n.但是,cat编写它是为了将它与给定的参数(via ...)粘贴在一起.

令人惊讶的是,这有效:

> library(functional)
> catnip <- Curry( cat, "\n" )
> catnip("hi")

 hi
Run Code Online (Sandbox Code Playgroud)

但是,在\n用户的文本之前结束.有没有办法来讨论函数,以便你指定curried参数总是结束...参数?

r currying

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

为什么class(data.frame(...))不显示列表继承?

人们常常说,data.frame继承list,这是有道理的给予许多常见的范例访问data.frame列($,sapply,等).

然而"list",不是在data.frame对象的类列表中返回的项目之一:

dat <- data.frame(x=runif(100),y=runif(100),z=runif(100),g=as.factor(rep(letters[1:10],10)))
> class(dat)
[1] "data.frame"
Run Code Online (Sandbox Code Playgroud)

取消分类data.frame显示它是一个列表:

> class(unclass(dat))
[1] "list"
Run Code Online (Sandbox Code Playgroud)

如果没有data.frame方法,测试它看起来像默认方法将优先调用list方法:

> f <- function(x) UseMethod('f')
> f.default <- function(x) cat("Default")
> f.list <- function(x) cat('List')
> f(dat)
Default
> f.data.frame <- function(x) cat('DF')
> f(dat)
DF
Run Code Online (Sandbox Code Playgroud)

那么两个问题:

  1. 从设计的角度来看,未能data.frame正式继承是否list有任何优势?
  2. 那些似乎将data.frames视为列表的函数如何知道将它们视为列表?看起来lapply它看起来很快就会转到C内部代码,所以也许就是这样,但我的思绪在这里有点夸张.

r r-s3

8
推荐指数
1
解决办法
433
查看次数