小编Zac*_*ach的帖子

如何在正在运行的屏幕会话中增加回滚缓冲区?

假设我有一个当前正在运行的屏幕会话,我正在通过putty进行交互.我已经意识到回滚缓冲区太小,想要在启动新的屏幕会话的情况下增加它.

有没有办法做到这一点?

linux gnu-screen

224
推荐指数
5
解决办法
14万
查看次数

为什么pandas在python中的合并速度比2012年R中的data.table合并更快?

我最近遇到了python 的pandas库,根据这个基准测试执行非常快速的内存中合并.它甚至比R中的data.table包更快(我选择用于分析的语言).

为什么pandas这么快data.table?是因为python具有超过R的固有速度优势,还是有一些我不知道的权衡?有没有办法在data.table不诉诸merge(X, Y, all=FALSE)和执行内部和外部联接的情况下merge(X, Y, all=TRUE)

对照

这是用于对各种包进行基准测试的R代码Python代码.

python join r pandas data.table

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

`1L`和`1`有什么区别?

我经常看到的符号1L(或2L,3L等)出现中的R代码.什么区别1L11==1L评估为TRUE.为什么1L在R代码中使用?

types r

142
推荐指数
3
解决办法
6万
查看次数

在大型data.table中替换NA的最快方法

我有一个大的data.table,在其大约200k行和200列中分散了许多缺失值.我想尽可能有效地将这些NA值重新编码为零.

我看到两个选项:
1:转换为data.frame,并使用类似这样的东西
2:某种很酷的data.table子设置命令

我会对类型1的相当有效的解决方案感到满意.转换为data.frame然后返回data.table不会花费太长时间.

performance r dataframe data.table

137
推荐指数
7
解决办法
6万
查看次数

如何防止ifelse()将Date对象转换为数字对象

我正在使用该函数ifelse()来操作日期向量.我期望结果是类Date,并且很惊讶地得到了一个numeric向量.这是一个例子:

dates <- as.Date(c('2011-01-01', '2011-01-02', '2011-01-03', '2011-01-04', '2011-01-05'))
dates <- ifelse(dates == '2011-01-01', dates - 1, dates)
str(dates)
Run Code Online (Sandbox Code Playgroud)

这尤其令人惊讶,因为在整个向量上执行操作会返回一个Date对象.

dates <- as.Date(c('2011-01-01', '2011-01-02', '2011-01-03', '2011-01-04','2011-01-05'))
dates <- dates - 1
str(dates)
Run Code Online (Sandbox Code Playgroud)

我应该使用其他功能来操作Date矢量吗?如果是这样,有什么功能?如果没有,我如何强制ifelse返回与输入相同类型的向量?

帮助页面ifelse表明这是一个功能,而不是一个错误,但我仍然在努力寻找一个解释我发现的令人惊讶的行为.

datetime if-statement r

136
推荐指数
6
解决办法
3万
查看次数

报告data.frame中缺失值的优雅方法

这是我编写的一小段代码,用于报告数据框中缺少值的变量.我正在尝试一种更优雅的方式来做这个,也许会返回一个data.frame,但是我被困住了:

for (Var in names(airquality)) {
    missing <- sum(is.na(airquality[,Var]))
    if (missing > 0) {
        print(c(Var,missing))
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:我正在处理包含数十到数百个变量的data.frames,因此我们只报告缺少值的变量是关键.

r missing-data dataframe

72
推荐指数
5
解决办法
11万
查看次数

正确/最快的方式来重塑data.table

我在R中有一个数据表:

library(data.table)
set.seed(1234)
DT <- data.table(x=rep(c(1,2,3),each=4), y=c("A","B"), v=sample(1:100,12))
DT
      x y  v
 [1,] 1 A 12
 [2,] 1 B 62
 [3,] 1 A 60
 [4,] 1 B 61
 [5,] 2 A 83
 [6,] 2 B 97
 [7,] 2 A  1
 [8,] 2 B 22
 [9,] 3 A 99
[10,] 3 B 47
[11,] 3 A 63
[12,] 3 B 49
Run Code Online (Sandbox Code Playgroud)

我可以通过data.table中的组轻松地对变量v求和:

out <- DT[,list(SUM=sum(v)),by=list(x,y)]
out
     x  y SUM
[1,] 1 A  72
[2,] 1 B 123
[3,] 2 …
Run Code Online (Sandbox Code Playgroud)

r data.table

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

使用插入符号完全可重复的并行模型

当我在插入符号中运行2个随机森林时,如果我设置了一个随机种子,我会得到完全相同的结果:

library(caret)
library(doParallel)

set.seed(42)
myControl <- trainControl(method='cv', index=createFolds(iris$Species))

set.seed(42)
model1 <- train(Species~., iris, method='rf', trControl=myControl)

set.seed(42)
model2 <- train(Species~., iris, method='rf', trControl=myControl)

> all.equal(predict(model1, type='prob'), predict(model2, type='prob'))
[1] TRUE
Run Code Online (Sandbox Code Playgroud)

但是,如果我注册并行后端以加速建模,每次运行模型时都会得到不同的结果:

cl <- makeCluster(detectCores())
registerDoParallel(cl)

set.seed(42)
myControl <- trainControl(method='cv', index=createFolds(iris$Species))

set.seed(42)
model1 <- train(Species~., iris, method='rf', trControl=myControl)

set.seed(42)
model2 <- train(Species~., iris, method='rf', trControl=myControl)

stopCluster(cl)

> all.equal(predict(model1, type='prob'), predict(model2, type='prob'))
[1] "Component 2: Mean relative difference: 0.01813729"
[2] "Component 3: Mean relative difference: 0.02271638"
Run Code Online (Sandbox Code Playgroud)

有什么方法可以解决这个问题吗?一个建议是使用doRNG包,但train使用嵌套循环,目前不支持:

library(doRNG)
cl …
Run Code Online (Sandbox Code Playgroud)

r reproducible-research r-caret

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

为什么data.table通过引用更新名称(DT),即使我分配给另一个变量?

我已将a的名称存储data.tablevector:

library(data.table)
set.seed(42)
DT <- data.table(x = runif(100), y = runif(100))
names1 <- names(DT)
Run Code Online (Sandbox Code Playgroud)

据我所知,这是一个普通的香草字符向量:

str(names1)
# chr [1:2] "x" "y"

class(names1)
# [1] "character"

dput(names1)
# c("x", "y")
Run Code Online (Sandbox Code Playgroud)

但是,这不是普通的字符向量.这是一个神奇的角色矢量!当我向我添加一个新列时data.table,此向量会更新!

DT[ , z := runif(100)]
names1
# [1] "x" "y" "z"
Run Code Online (Sandbox Code Playgroud)

我知道这与如何:=通过作业进行更新有关,但这对我来说仍然是神奇的,因为我希望<-能够复制这些data.table名字.

我可以通过将名称包装在c():

library(data.table)
set.seed(42)
DT <- data.table(x = runif(100), y = runif(100))

names1 <- names(DT)
names2 <- c(names(DT))
all.equal(names1, names2)
# [1] TRUE …
Run Code Online (Sandbox Code Playgroud)

r data.table

40
推荐指数
1
解决办法
2456
查看次数

在R中上传超过2.15 GB的文件

我有一个手动过程,我通过curl将5-6 GB文件上传到Web服务器:

curl -X POST --data-binary @myfile.csv http://myserver::port/path/to/api
Run Code Online (Sandbox Code Playgroud)

这个过程很好,但是我喜欢用R自动化它.问题是,我要么不知道我在做什么,要么curl的R库不知道如何处理大于~2GB的文件:

library(RCurl)
postForm(
     "http://myserver::port/path/to/api",
      file = fileUpload(
        filename = path.expand("myfile.csv"),
        contentType = "text/csv"
      ),.encoding="utf-8")
Run Code Online (Sandbox Code Playgroud)

Yeilds Error: Internal Server Error

httr也不起作用:

library(httr)
POST(
      url = "http://myserver:port/path/to/api",
      body = upload_file(
        path =  path.expand("myfile.csv"),
        type = 'text/csv'),
      verbose()
    )
Run Code Online (Sandbox Code Playgroud)

产量:

Response [http://myserver:port/path/to/api]
  Date: 2015-06-30 11:11
  Status: 400
  Content-Type: <unknown>
<EMPTY BODY>
Run Code Online (Sandbox Code Playgroud)

httr对该verbose()选项提供了更多信息,告诉我:

-> POST http://myserver:port/path/to/api
-> User-Agent: libcurl/7.35.0 r-curl/0.9 httr/1.0.0
-> Host: http://myserver::port
-> Accept-Encoding: gzip, deflate
-> Accept: application/json, text/xml, application/xml, */* …
Run Code Online (Sandbox Code Playgroud)

curl r rcurl httr

36
推荐指数
1
解决办法
1290
查看次数