小编Ben*_*Ben的帖子

在哪里创建包环境变量?

我在做数据分析并创建了一个包来存储我的护身符和数据,说明在这里.

我想设置一些可用于我所有包函数的变量.

这些变量定义:数据集的路径,测量特征(如探针位置),物理常数等.

我已经读过,存储这些变量的一种推荐方法是使用环境.

问题是,我在哪里放置创建环境的脚本?

我想把它放在onLoad方法中,以确保它在加载包时执行.

r environment-variables r-package

4
推荐指数
1
解决办法
1829
查看次数

使用泛型链接任务

我正在尝试为链接任务创建API.

首先,我设计了一个定义任务的非常简单的界面:

public interface Task<U, V> {  
    U execute(V input);  
}
Run Code Online (Sandbox Code Playgroud)

V输入类型和U任务的输出类型在哪里.

我要创建的是一个Chain链接列表的类Tasks.

例如,我想执行: Task1<TypeA, TypeB> -> Task2<TypeB, TypeC> -> Task3<TypeC, TypeD>

这个Chain课程因此是一个Task<TypeA, TypeD>.

所以我编写了这段代码,它不能编译:

public class Chain<U, V> implements Task<U, V> {  
    List<Task<?, ?>> taskList;

    public Chain() {  
        taskList = new LinkedList<Task<?, ?>>();  
    }

    @Override  
    public U execute(V input) {  
        V currentInput = input;  
        U output = null;  
        for (Task<?, ?> task : taskList) {  
            output = task.execute(currentInput); …
Run Code Online (Sandbox Code Playgroud)

java generics

3
推荐指数
1
解决办法
1364
查看次数

如何更换if的长链

我有一个包含3个整数i,j和k的对象.

那些整数可以有一个减号(M),一个加号(P)或者为空(O).

因此,任何此类对象都可以归类为以下类别之一:MMM,MMP,MPM,MPP,PMM,PMP,PPM,PPP,OMM,OMP,OPM,OPP,MOM,MOP,POM,POP,MMO,MPO,PMO ,PPO,MOO,POO,OMO,OPO,OOM,OOP,OOO.

我想对这种类型的对象执行计算,这些对象将根据对象的类别而有所不同.

我的对象不仅包含这三个整数,还包含将在计算中使用的其他信息.

我的两个问题是:

  • 如何从i,j和k值中推导出对象的类别?

  • 如何实现正确算法的选择?

我做了一个天真的实现,使用枚举和很多if ... else,但我对结果不满意,尤其是if ... else部分.

任何更好,更面向对象的想法?

数据类:

public class Data {
    private int i, j, k;
    private double otherData;
    private Category category;

    public void init(int i, int j, int k) {
        this.i = i;
        this.j = j;
        this.k = k;

        if (i < 0) {
            if (j < 0) {
                if (k < 0) {
                    category = Category.MMM;
                } else if (k > 0) {
                    category = Category.MMP;
                } else//(k >= …
Run Code Online (Sandbox Code Playgroud)

java oop enums

3
推荐指数
1
解决办法
146
查看次数

使用sprintf格式化数据帧数据

阅读此问题后,我尝试对数据框执行相同的操作:

x <- c(1,2,3,4)
y <- c(5,6,7,8)
my.df <- data.frame(x, y)
do.call("sprintf", c("%14.7E", my.df))
Run Code Online (Sandbox Code Playgroud)

但这仅适用于第一列:

[1] " 1.0000000E+00" " 2.0000000E+00" " 3.0000000E+00" " 4.0000000E+00"
Run Code Online (Sandbox Code Playgroud)

我想要的是:

 1.0000000E+00 5.0000000E+00
 2.0000000E+00 6.0000000E+00
 3.0000000E+00 7.0000000E+00
 4.0000000E+00 8.0000000E+00
Run Code Online (Sandbox Code Playgroud)

因此,我可以将其写入将由fortran代码读取的文件中。

r

3
推荐指数
1
解决办法
1145
查看次数

比较包含NA的数据帧行

我有一个包含两列的数据框:

x <- c(1, 2, 3, 4, NA, 5, 6)
y <- c(1, 2, 4, 5, 0, 5, 6)

my.df <- data.frame(x, y)
Run Code Online (Sandbox Code Playgroud)

我想只保留x!= y的行.

我做的是这样的:

my.df <- subset(my.df, x != y)
Run Code Online (Sandbox Code Playgroud)

我的期望是:

x  y
3  4
4  5
NA 0
Run Code Online (Sandbox Code Playgroud)

我得到的是

x  y
3  4
4  5
Run Code Online (Sandbox Code Playgroud)

这是因为,通过一个奇怪的惯例,NA != 0NA.

我真的想将NA保留在子集中,因为我正在寻找列之间的差异.

怎么做到这一点?

r

3
推荐指数
1
解决办法
58
查看次数

gsub、前瞻和后瞻

我有一个字符串向量,其中包含:

Number of source1.2_SPNB.txt
Number of source1.1_SPNB.txt
Number of source1.3_SPNB.txt
Run Code Online (Sandbox Code Playgroud)

我需要在新向量中提取“source1.1”、“source1.2”和“source1.3”。

在此之后,我尝试了:

gsub("(?<=of )(.*)(?=_)", "\\1", string.vector)
Run Code Online (Sandbox Code Playgroud)

但我收到一个错误:

无效的正则表达式 '(?<=of )(.*)(?=_)',原因 '无效的正则表达式'

然后我尝试:

gsub("(?<=of )(.*)(?=_)", "\\1", string.vector, perl = TRUE)
Run Code Online (Sandbox Code Playgroud)

但它返回了完全相同的字符串向量。

我究竟做错了什么?

regex r

3
推荐指数
1
解决办法
2378
查看次数

如何在HashMap中正确使用双坐标作为键?

我有一个定义节点的类(一个有三个双坐标的点).

public class Node {
    private final double x, y, z;

    public Node() {
    }

    public Node(final double x, final double y, final double z) {
        this.x = x;
        this.y = y;
        this.z = z;
    }

    public void setCoordinates(final double x, final double y, final double z) {
        this.x = x;
        this.y = y;
        this.z = z;
    }
}
Run Code Online (Sandbox Code Playgroud)

我需要创建很多节点并给它们整数ID,但我必须避免重复.

创建节点的方法如下所示:

private Node vertex = new Node(0, 0, 0);
private final AtomicInteger nodeCounter = new AtomicInteger();
private final Map<Node, Integer> …
Run Code Online (Sandbox Code Playgroud)

java hashmap

3
推荐指数
1
解决办法
276
查看次数

在R中的每个向量元素的末尾添加度符号

我有一个数值向量,说:

angles <- c(10.2, 20.3, 14.3, 18.4)
Run Code Online (Sandbox Code Playgroud)

我想在每个元素的末尾附加度数符号,以获得:

labels <- c("10.2°", "20.3°", "14.3°", "18.4°")
Run Code Online (Sandbox Code Playgroud)

我尝试使用bquote()函数但没有成功:

labels <- bquote(paste(.(angles) * degree))
Run Code Online (Sandbox Code Playgroud)

r

2
推荐指数
1
解决办法
631
查看次数

在ggplot2的for循环中使用geom_text

我想使用geom_text()函数在ggplot图上显示文本标签列表。

这些标签的位置存储在列表中。

使用以下代码时,仅出现第二个标签。

x <- seq(0, 10, by = 0.1)
y <- sin(x)
df <- data.frame(x, y)
g <- ggplot(data = df, aes(x, y)) + geom_line()

pos.x <- list(5, 6)
pos.y <- list(0, 0.5)

for (i in 1:2) {
  g <- g + geom_text(aes(x = pos.x[[i]], y = pos.y[[i]], label = paste("Test", i)))
}

print(g)
Run Code Online (Sandbox Code Playgroud)

知道此代码有什么问题吗?

r ggplot2 geom-text

2
推荐指数
1
解决办法
858
查看次数

geom_vline,图例和性能

我想在我的情节上绘制几条垂直线,并为每个相应的 vline 绘制一个图例。

阅读这篇文章后,这是我实现的:

set.seed(99)
df.size <- 1e6
my.df <- data.frame(dist = rnorm(df.size, mean = 0, sd = 2))
library(ggplot2)
ggplot(my.df, aes(x=dist)) + geom_histogram(binwidth = 0.5)

vline1.threshold <- mean(my.df$dist)
vline2.threshold <- mean(my.df$dist) + 3*sd(my.df$dist)
Run Code Online (Sandbox Code Playgroud)

现在的情节:

g <- ggplot(my.df, aes(x = dist)) +
  geom_histogram(binwidth = 0.5) +
  geom_vline(aes(color = "vline1", xintercept = vline1.threshold)) +
  geom_vline(aes(color = "vline2", xintercept = vline2.threshold)) +
  scale_color_manual("Threshold", values = c(vline1 = "red", vline2 = "blue"), labels = c("Mean", "Mean + 3*SD"))
system.time(print(g))
Run Code Online (Sandbox Code Playgroud)

这很有效:

在此处输入图片说明

但它非常慢: …

r ggplot2 geom-vline

2
推荐指数
1
解决办法
483
查看次数