我最终得到了一个很大的data.table,我必须每行做一次操作.(是的......我知道这显然不是data.table的用途)
R) set.seed(1)
R) DT=data.table(matrix(rnorm(100),nrow=10))
R) DT[,c('a','b'):=list(1:10,2:11)]
R) DT
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 a b
1: -0.6264538107 1.51178116845 0.91897737161 1.35867955153 -0.1645235963 0.3981058804 2.40161776050 0.475509528900 -0.5686687328 -0.5425200310 1 2
2: 0.1836433242 0.38984323641 0.78213630073 -0.10278772734 -0.2533616801 -0.6120263933 -0.03924000273 -0.709946430922 -0.1351786151 1.2078678060 2 3
3: -0.8356286124 -0.62124058054 0.07456498337 0.38767161156 0.6969633754 0.3411196914 0.68973936245 0.610726353489 1.1780869966 1.1604026157 3 4
4: 1.5952808021 -2.21469988718 -1.98935169586 -0.05380504058 0.5566631987 -1.1293630961 0.02800215878 -0.934097631644 -1.5235668004 0.7002136495 4 5
5: 0.3295077718 1.12493091814 0.61982574789 -1.37705955683 -0.6887556945 1.4330237017 …Run Code Online (Sandbox Code Playgroud) 我正在尝试与data.tables进行一些左连接合并.包描述引用
在所有连接中,列的名称无关紧要; x键的列按顺序连接
我明白我可以使用.data.table[和data.table:::merge.data.table
我想要的是:合并X和Y指定键(如基础合并中的by.x和by.y, - >为什么要取消它?)
我想我有
DT = data.table(x=rep(c("a","b","c"),each=3),y=c(1,3,6),v=1:9,key="x,y,v")
DT1 = data.frame(x1=c("aa","bb","cc"),y1=c(1,3,6),v1=1:3,key="x1,y1,v1")
Run Code Online (Sandbox Code Playgroud)
我希望这个输出:
#data.table:::merge is masking I don't know how to call the base version of merge anymore
R) {base::merge}(DT,DT1,by.x="y",by.y="y1")
y x v x1 v1
1 1 a 1 aa 1
2 1 c 7 aa 1
3 1 b 4 aa 1
4 3 a 2 bb 2
5 3 b 5 bb 2
6 3 c 8 bb 2
7 6 b 6 …Run Code Online (Sandbox Code Playgroud) 我想将 rmarkdown.Rmd文档转换为 jupyter notebook .ipynb。我发现从 jupyter 转换为 rmd 很容易使用,如参考页面中所述,但由于某种原因(...),Rstudio团队没有采取其他方式。
例如我想转换
---
title: "Untitled"
author: "statquant"
date: "03/09/2019"
output: html_document
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```
## R Markdown
This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see <http://rmarkdown.rstudio.com>.
When you click the **Knit** button a document will be generated that includes both …Run Code Online (Sandbox Code Playgroud) 我正在使用新版本,data.table特别是AWESOME fread功能.我的文件包含作为字符串加载的日期(因为我不知道这样做),看起来像01APR2008:09:00:00.
我需要梳理这些日期时间的data.table,然后排序是有效的投,然后IDateTime格式(或任何ALSE我还不知道).
> strptime("01APR2008:09:00:00","%d%b%Y:%H:%M:%S")
[1] "2008-04-01 09:00:00"
> IDateTime(strptime("01APR2008:09:00:00","%d%b%Y:%H:%M:%S"))
idate itime
1: 2008-04-01 09:00:00
> IDateTime("01APR2008:09:00:00","%d%b%Y:%H:%M:%S")
Error in charToDate(x) :
character string is not in a standard unambiguous format
Run Code Online (Sandbox Code Playgroud)
看起来我做不到DT[ , newType := IDateTime(strptime(oldType, "%d%b%Y:%H:%M:%S"))].
我的问题是:
IDateTime从fread,这样我可以排序后有效?使用foreach和doMC后端使用"多核"并行性时(我使用doMC时,我调查了其他包不允许从我想要获取进度条,使用进度包,但任何进度)这适用于Linux终端,即没有tcltk弹出窗口).
鉴于它使用分叉,我可以想象它可能不可能,但我不确定.
预期用途是指示并行加载连接100个文件时的进度(通常在#!Rscript中)
我看过几个帖子,比如在R中使用"foreach()"函数时如何创建进度条?.很高兴为此奖励.
编辑
为有人向我展示500分的赏金
Reprex
# load packages
library("futile.logger")
library("data.table")
library("foreach")
# create temp dir
tmp_dir <- tempdir()
# create names for 200 files to be created
nb_files <- 200L
file_names <- file.path(tmp_dir, sprintf("file_%s.txt", 1:nb_files))
# make it reproducible
set.seed(1L)
nb_rows <- 1000L
nb_columns <- 10L
# create those 200 files sequentially
foreach(file_i = file_names) %do%
{
DT <- as.data.table(matrix(data = runif(n = nb_rows * nb_columns), nrow …Run Code Online (Sandbox Code Playgroud) 看看rcpp文档和Rcpp::DataFrame库中我意识到我不知道如何通过引用修改DataFrame.谷歌搜索了一下我在SO上找到了这篇文章,这篇文章在档案上.没有什么明显的,所以我怀疑我会错过一些像"已经是这种情况因为"或"因为它没有意义"的大事.
我尝试了以下编译,但data.frame传递给updateDFByRefR 的对象 保持不变
#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
void updateDFByRef(DataFrame& df) {
int N = df.nrows();
NumericVector newCol(N,1.);
df["newCol"] = newCol;
return;
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试构建R软件包png,repo说libpng需要提供.
我运行Linux Fedora 20发行版
看起来我有它......
[root@localhost bin]# yum install libpng
Loaded plugins: langpacks, refresh-packagekit
Package 2:libpng-1.6.3-3.fc20.x86_64 already installed and latest version
Nothing to do
Run Code Online (Sandbox Code Playgroud)
但是当我尝试安装它时:
> install.packages("png")
Installing package into ‘/home/statquant/R/x86_64-redhat-linux-gnu-library/3.0’
(as ‘lib’ is unspecified)
trying URL 'http://cran.rstudio.com/src/contrib/png_0.1-7.tar.gz'
Content type 'application/x-gzip' length 24990 bytes (24 Kb)
opened URL
==================================================
downloaded 24 Kb
* installing *source* package ‘png’ ...
** package ‘png’ successfully unpacked and MD5 sums checked
** libs
gcc -m64 -std=gnu99 -I/usr/include/R -DNDEBUG …Run Code Online (Sandbox Code Playgroud) 我有一个POSIXct对象,并希望更改它的tz属性WITHOUT R来解释它(解释它将意味着改变日期时间在屏幕上的显示方式).
一些背景:我正在使用fasttime来自S.Urbanek 的包,它采用字符串并将其POSIXct快速投射.问题是字符串应该代表"GMT"中的日期时间,而不是我的数据的情况.
我最终得到一个POSIXct对象tz=GMT,实际上是tz=GMT+1,如果我改变时区
attr(datetime, "tzone") <- "Europe/Paris";
datetime <- .POSIXct(datetime,tz="Europe/Paris");
Run Code Online (Sandbox Code Playgroud)
然后它将"显示"为GMT+2(基础值永远不会改变).
编辑:这是一个例子
datetime=as.POSIXct("2011-01-01 12:32:23.234",tz="GMT")
attributes(datetime)
#$tzone
#[1] "GMT"
datetime
#[1] "2011-01-01 12:32:23.233 GMT"
Run Code Online (Sandbox Code Playgroud)
如何在没有R的情况下更改此属性来解释它,又如何更改tzone并仍然显示日期时间"2011-01-01 12:32:23.233"?
编辑/解决方案,@ GSee的解决方案相当快,lubridate :: force_tz非常慢
datetime=rep(as.POSIXct("2011-01-01 12:32:23.234",tz="GMT"),1e5)
f <- function(x,tz) return(as.POSIXct(as.numeric(x), origin="1970-01-01", tz=tz))
> system.time(datetime2 <- f(datetime,"Europe/Paris"))
user system elapsed
0.01 0.00 0.02
> system.time(datetime3 <- force_tz(datetime,"Europe/Paris"))
user system elapsed
5.94 0.02 5.98
identical(datetime2,datetime3)
[1] TRUE
Run Code Online (Sandbox Code Playgroud) 正确使用freaddata.table加载integer64,虽然我的印象是by语句没有正确处理int64.我可能在这里做错了,这是什么?
library(data.table); library(bit64);
test = data.table(x=c(1,2,3),y=c('x','q','q'),ID=as.integer64(c('432706205348805058','432706205348805058','432706205348805059')))
str(test) #the display is wrong (BUT IT IS EXPECTED)
#Classes ‘data.table’ and 'data.frame': 3 obs. of 3 variables:
# $ x : num 1 2 3
# $ y : chr "x" "q" "q"
# $ ID:Class 'integer64' num [1:3] 9.52e-280 9.52e-280 9.52e-280
# - attr(*, ".internal.selfref")=<externalptr>
test # Here it is displayed correctly
# x y ID
#1: 1 x 432706205348805058
#2: 2 q 432706205348805058
#3: 3 …Run Code Online (Sandbox Code Playgroud) 我很困惑.
以下编译和工作正常:
#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
List test(){
List l;
IntegerVector v(5, NA_INTEGER);
l.push_back(v);
return l;
}
Run Code Online (Sandbox Code Playgroud)
在R:
R) test()
[[1]]
[1] NA NA NA NA NA
Run Code Online (Sandbox Code Playgroud)
但是当我尝试IntegerVector在列表中设置时:
// [[Rcpp::export]]
List test(){
List l;
IntegerVector v(5, NA_INTEGER);
l.push_back(v);
l[0][1] = 1;
return l;
}
Run Code Online (Sandbox Code Playgroud)
它不编译:
test.cpp:121:8: error: invalid use of incomplete type 'struct SEXPREC'
C:/PROGRA~1/R/R-30~1.0/include/Rinternals.h:393:16: error: forward declaration of 'struct SEXPREC'
Run Code Online (Sandbox Code Playgroud) r ×9
data.table ×4
rcpp ×2
datetime ×1
domc ×1
fedora20 ×1
install ×1
knitr ×1
libpng ×1
posixct ×1
progress-bar ×1
r-markdown ×1
timezone ×1