我有一些麻烦的eval内data.table中的R与表达工作.这是一些代码:
dtb = data.table(a=1:100, b=100:1, id=1:10)
dtb[,`:=`(c=a+b, d=a/b),by=id] #this works fine
expr = expression({`:=`(c=a+b, d=a/b)}) #try to couch everything in an expression
dtb[,eval(expr),by=id] #this does not work
Error in `:=`(c = a + b, d = a/b) :
unused argument(s) (c = a + b, d = a/b)
expr = expression(`:=`(c=a+b, d=a/b)) #this works fine
dtb[,eval(expr),by=id]
Run Code Online (Sandbox Code Playgroud)
为什么包括{}打破这个?
以下是我认为可能的错误:
require(lubridate)
d = as.Date("1994-03-31")
> d + months(1)
[1] "1994-05-01"
Run Code Online (Sandbox Code Playgroud)
我的理解是,这应该返回到1994年4月底.请告知这是否确实是一个错误.
我有一个Date,并有兴趣将其表示为一个整数yyyymm形式.目前,我这样做:
get_year_month <- function(d) { return(as.integer(format(d, "%Y%m")))}
mydate = seq.Date(from=as.Date("2012-01-01"), to=as.Date("5012-01-01"), by=1)
system.time(ym <- get_year_month(mydate))
# user system elapsed
# 5.972 0.974 6.951
Run Code Online (Sandbox Code Playgroud)
这对于大型数据集来说非常慢.有更快的方法吗?请提供答案的时间安排,以便轻松比较.使用上面的例子.
我相信这可能是一个错误。如果是这样,我将报告。寻找确认:
> is.null(data.table(NULL))
[1] FALSE
Run Code Online (Sandbox Code Playgroud)
我在常见问题解答中看到以下内容:
2.5 NULL data.table是否与DT [0]相同?否,尽管打印方法另有说明。严格来说,不可能有is.null(data.table(NULL))返回FALSE。将来可能会再次访问该常见问题解答。
如果这是预期的行为:如何检查对象是否为null?特别rbindlist是一个NULL对象返回一个NULL data.table怎么检查?
> is.null(rbindlist(NULL))
[1] FALSE
Run Code Online (Sandbox Code Playgroud) 我想scale在我的一部分列中data.table.我希望有很多这样的,scale所以我想避免通过名称来指定它们.没有缩放的列,我只想按原样返回.这是我希望可以工作,但它没有:
require(data.table)
x = data.table(id=1:10, a=sample(1:10,10), b=sample(1:10,10), c=sample(1:10,10))
> dput(x)
structure(list(id = 1:10, a = c(1L, 6L, 10L, 7L, 5L, 3L, 2L,
4L, 9L, 8L), b = c(4L, 9L, 5L, 7L, 6L, 1L, 8L, 10L, 3L, 2L),
c = c(2L, 7L, 5L, 6L, 4L, 1L, 10L, 9L, 8L, 3L)), .Names = c("id",
"a", "b", "c"), row.names = c(NA, -10L), class = c("data.table",
"data.frame"), .internal.selfref = <pointer: 0x1a85d088>)
sx = x[,c(id, lapply(.SD, function(v) as.vector(scale(v)))), .SDcols …Run Code Online (Sandbox Code Playgroud) 想象一下,我data.frame在R中有很多列.我想只选择所有列都有有限值的行.
set.seed(123)
d = data.frame(matrix(sample(c(1:10, Inf, -Inf), 100, replace=T), ncol=20))
Run Code Online (Sandbox Code Playgroud)
我不想按名称引用每一列,因为它们有很多.na.omit并且complete.cases不会在这里做的伎俩.
一种方法是运行:
d[apply(apply(d, 2, is.finite), 1, all),]
Run Code Online (Sandbox Code Playgroud)
这很难看.有没有更好的办法?
我在R中创建一个data.table并设置一个用作键的列.当我尝试从数据表中检索值时; 对于没有匹配的行,我得到NA值.我通常不希望在我的搜索中出现这种行为.以下示例
library(data.table)
dt <- data.table('foo'=seq(10),bar=sample(letters,10))
setkey(dt,bar)
dt[sample(letters,5)]
> dt[sample(letters,5)]
b foo
1: x 4
2: q 2
3: u 8
4: s NA
5: b NA
Run Code Online (Sandbox Code Playgroud) 我试图从R连接到我的数据库.当我从shell启动服务器(使用unix)时,我必须传递--ssl-ca = myfile.如何使用dbConnect函数传递此标志?谢谢.
我正在将一个大型数据集(60演出)加载到数据库中.有些记录可以跳过,因为它们包含缺少的值.如何告诉MySQL跳过包含某些(在这种情况下丢失)值的行?例如,我的文件看起来像这样
Value1, Value2
1,2
3,4
,5
9,10
Run Code Online (Sandbox Code Playgroud)
第三行可以跳过而不加载.我知道我可以加载所有内容然后删除它但处理60 gig文件需要很长时间,所以我想节省计算能力.
谢谢
我有一个函数需要访问其父环境中的变量(调用该函数的范围).变量在内存方面很大,所以我不希望将值传递给被调用的函数.除了在全局范围内声明变量之外,还有一种标准的方法吗?例如:
g <- function (a, b) { #do stuff}
f <- function(x) {
y <- 3 #but in my program y is very large
g(x, y)
}
Run Code Online (Sandbox Code Playgroud)
我想访问y in g().所以像这样:
g <- function (a) { a+y }
f <- function(x) {
y <- 3 #but in my program y is very large
g(x)
}
Run Code Online (Sandbox Code Playgroud)
这可能吗?
谢谢
r ×9
data.table ×4
date ×2
lubridate ×2
mysql ×2
apply ×1
database ×1
dataframe ×1
eval ×1
expression ×1
function ×1
if-statement ×1
posixct ×1
scope ×1
sql ×1