在为已经聚合的数据创建一些采样函数的过程中,我发现表格在我正在使用的大小数据上相当慢.我尝试了两个改进,首先是Rcpp函数,如下所示
// [[Rcpp::export]]
IntegerVector getcts(NumericVector x, int m) {
IntegerVector cts(m);
int t;
for (int i = 0; i < x.length(); i++) {
t = x[i] - 1;
if (0 <= t && t < m)
cts[t]++;
}
return cts;
}
Run Code Online (Sandbox Code Playgroud)
然后在试图理解为什么表格相当慢的时候,我发现它基于制表.Tabulate对我来说效果很好,并且比Rcpp版本更快.制表的代码位于:
https://github.com/wch/r-source/blob/545d365bd0485e5f0913a7d609c2c21d1f43145a/src/main/util.c#L2204
关键是:
for(R_xlen_t i = 0 ; i < n ; i++)
if (x[i] != NA_INTEGER && x[i] > 0 && x[i] <= nb) y[x[i] - 1]++;
Run Code Online (Sandbox Code Playgroud)
现在制表和我的Rcpp版本的关键部分看起来非常接近(我没有打扰过NA).
Q1:为什么我的Rcpp版本慢了3倍?
Q2:我怎样才能知道这个时间到了哪里?
我非常感谢知道时间的去向,但更好的方法是分析代码.我的C++技能只是如此,但这似乎很简单,我应该(交叉我的手指)能够避免任何会使我的时间增加三倍的愚蠢的东西.
我的时间码:
max_x <- 100
xs <- sample(seq(max_x), …Run Code Online (Sandbox Code Playgroud) 我正在学习Android.从我到目前为止阅读的文档中我无法弄清楚如何使用show view来显示(在睡眠期间屏幕保持空白).看来我需要为主布局开始一个新的活动,但这看起来很浪费(飞溅应该永远消失,我想重用它的线程).
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
public class Ext3 extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.splash);
Log.v("Ext3", "starting to sleep");
try {
Thread.sleep (5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Log.v("Ext3", "done sleeping");
setContentView (R.layout.main);
}
}
Run Code Online (Sandbox Code Playgroud) 怎么做
df1 %>% spread(groupid, value, fill = 0) %>% gather(groupid, value, one, two)
Run Code Online (Sandbox Code Playgroud)
以更自然的方式?
给定数据框
df1 <- data.frame(groupid = c("one","one","one","two","two","two", "one"),
value = c(3,2,1,2,3,1,22),
itemid = c(1:6, 6))
Run Code Online (Sandbox Code Playgroud)
对于许多itemid和groupid对,我们都有一个值,对于某些itemid,有些groupids没有值。我想为这些情况添加默认值。例如对于itemid 1和groupid“ two”没有值,我想在其中获取默认值的行中添加一个值。
以下tidyr代码可实现此目的,但感觉起来很奇怪(在此添加的默认值为0)。
df1 %>% spread(groupid, value, fill = 0) %>% gather(groupid, value, one, two)
Run Code Online (Sandbox Code Playgroud)
我正在寻找有关如何以更自然的方式执行此操作的建议。
由于在过去的几周里看了上面的代码,我可能对其效果感到困惑,所以我编写了一个包装它的函数:
#' Add default values for missing groups
#'
#' Given data about items where each item is identified by an id, and every
#' item can have a value in every group; …Run Code Online (Sandbox Code Playgroud) 我正在努力了解docker的功能,以便我有理由相信我正在安全地使用它.对此的一个建议是始终USER在Dockerfile中使用语句.在试图了解这种效果时我遇到了一些麻烦.
具体问题:
testuser但不允许ls目录中的when?testuser?此问题底部的版本信息.
我有以下Dockerfile
FROM alpine@sha256:1354db23ff5478120c980eca1611a51c9f2b88b61f24283ee8200bf9a54f2e5c
LABEL version 2.0
LABEL description "Test image for setting user"
RUN adduser -D testuser1 ## sometimes removed
RUN adduser -D testuser2 ## sometimes removed
RUN adduser -D testuser
USER testuser
CMD sh
Run Code Online (Sandbox Code Playgroud)
我建立这个
docker build -t kasterma/testuser:1 .
Run Code Online (Sandbox Code Playgroud)
然后运行
docker run -ti -v /home/kasterma/test-user/:/test-home kasterma/testuser:1
Run Code Online (Sandbox Code Playgroud)
该目录/home/kasterma/test-user/是包含Dockerfile的目录.
##sometimes removedDockerfile中标记的两行.[root@datalocal01 test-user]# docker run -ti -v /home/kasterma/test-user/:/test-home kasterma/testuser:1
/ $ …Run Code Online (Sandbox Code Playgroud) 给定图fg,我的例子:
library("igraph")
fg <- feature.graph <- graph.empty()
fg <- fg + vertices("root", "ho", "ha", value=c(1,2,3)) +
edges(c("root", "ho", "root", "ha"), label=c("en", "an"), prob=c(0.2,0.8))
Run Code Online (Sandbox Code Playgroud)
我提取了一个感兴趣的边缘:
> edge.of.interest <- E(fg)[from("root")][[1]]
> edge.of.interest
Edge sequence:
e
e [1] root -> ho
Run Code Online (Sandbox Code Playgroud)
要获得此边缘的源或目标,我可以这样做:
> get.edge(fg, edge.of.interest)
[1] 1 2
> get.edge(fg, edge.of.interest)[1]
[1] 1
> get.edge(fg, edge.of.interest)[2]
[1] 2
Run Code Online (Sandbox Code Playgroud)
我原本期望一个具有这种效果的函数源和目标:
> target(edge.of.interest)
2
Run Code Online (Sandbox Code Playgroud)
我一直无法找到这个或等效的功能.通过get.edge的方法是最好的吗?
我在 OS X 上,通过 brew 安装了 docker。尝试使用 docker-machine 和 docker 的组合。Docker 似乎忽略了我的环境设置。我怎样才能解决这个问题?
$ docker-machine env default2
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.100:2376"
export DOCKER_CERT_PATH="/Users/kasterma/.docker/machine/machines/default2"
export DOCKER_MACHINE_NAME="default2"
# Run this command to configure your shell:
# eval $(docker-machine env default2)
$ eval $(docker-machine env default2)
Run Code Online (Sandbox Code Playgroud)
我的理解是现在一切都在 shell 中设置,因为它应该使用 docker。然而:
$ docker ps
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
Run Code Online (Sandbox Code Playgroud)
如果我在命令行上指定所有内容,它就可以工作
$ docker -H tcp://192.168.99.100:2376 --tls --tlscacert /Users/kasterma/.docker/machine/machines/default2/ca.pem --tlscert /Users/kasterma/.docker/machine/machines/default2/cert.pem --tlskey /Users/kasterma/.docker/machine/machines/default2/key.pem ps
CONTAINER ID NAMES IMAGE STATUS …Run Code Online (Sandbox Code Playgroud)