如果在某处有一个简单的答案,我会提前道歉.这似乎是那样的事情,但我似乎无法通过搜索SO或谷歌搜索在帮助文件中找到它.
我现在正在使用几个GB的数据集.它足以适应我有权访问的其中一个集群节点的内存,但需要花费相当多的时间来加载.对于使用此数据的许多调试/编程活动,我不需要加载整个文件,只需要在前几千个观察点上有一个数据集来测试代码.我当然可以只读取整个文件和子集,但我想知道是否有办法告诉read.dta()
只读前N行?这当然要快得多.
我也可以使用像.csv这样的正确格式,然后使用read.csv()
's nrows参数,但是我会丢失Stata数据集中的因子标签(并且必须从其他人的代码中重新创建相当多的GB数据.这个项目.因此首选.dta文件的直接解决方案.
Stata有一个命令compress
,可以查看所有数据行,并尝试将每个数据行强制转换为最有效的格式.例如,如果在data.frame中将一堆整数存储为字符向量,则会将其强制转换为整数.
我可以想象一下如何在R中编写这样的函数,但它是否已经存在?
这很简单,但我似乎找不到它.我知道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) 我正在尝试使用以下(嵌套)结构创建一个列表:
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 …
我想在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) 一个人怎么会成为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对象,我无法重新构建它.你的意见?
我终于决定将在互联网上浮动的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) 我有一个看起来像这样的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拼图.
我正在考虑cat
总是追加\n
.但是,cat
编写它是为了将它与给定的参数(via ...
)粘贴在一起.
令人惊讶的是,这有效:
> library(functional)
> catnip <- Curry( cat, "\n" )
> catnip("hi")
hi
Run Code Online (Sandbox Code Playgroud)
但是,在\n
用户的文本之前结束.有没有办法来讨论函数,以便你指定curried参数总是结束...
参数?
人们常常说,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)
那么两个问题:
data.frame
正式继承是否list
有任何优势?data.frame
s视为列表的函数如何知道将它们视为列表?看起来lapply
它看起来很快就会转到C内部代码,所以也许就是这样,但我的思绪在这里有点夸张.