假设我有一个当前正在运行的屏幕会话,我正在通过putty进行交互.我已经意识到回滚缓冲区太小,想要在不启动新的屏幕会话的情况下增加它.
有没有办法做到这一点?
我最近遇到了python 的pandas库,根据这个基准测试执行非常快速的内存中合并.它甚至比R中的data.table包更快(我选择用于分析的语言).
为什么pandas这么快data.table?是因为python具有超过R的固有速度优势,还是有一些我不知道的权衡?有没有办法在data.table不诉诸merge(X, Y, all=FALSE)和执行内部和外部联接的情况下merge(X, Y, all=TRUE)?

我经常看到的符号1L(或2L,3L等)出现中的R代码.什么区别1L和1? 1==1L评估为TRUE.为什么1L在R代码中使用?
我有一个大的data.table,在其大约200k行和200列中分散了许多缺失值.我想尽可能有效地将这些NA值重新编码为零.
我看到两个选项:
1:转换为data.frame,并使用类似这样的东西
2:某种很酷的data.table子设置命令
我会对类型1的相当有效的解决方案感到满意.转换为data.frame然后返回data.table不会花费太长时间.
我正在使用该函数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表明这是一个功能,而不是一个错误,但我仍然在努力寻找一个解释我发现的令人惊讶的行为.
这是我编写的一小段代码,用于报告数据框中缺少值的变量.我正在尝试一种更优雅的方式来做这个,也许会返回一个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中有一个数据表:
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) 当我在插入符号中运行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) 我已将a的名称存储data.table为vector:
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) 我有一个手动过程,我通过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) r ×9
data.table ×4
dataframe ×2
curl ×1
datetime ×1
gnu-screen ×1
httr ×1
if-statement ×1
join ×1
linux ×1
missing-data ×1
pandas ×1
performance ×1
python ×1
r-caret ×1
rcurl ×1
types ×1