小编MSR*_*MSR的帖子

为R中的命名向量重载$

使用命名向量时

vec <- c(a = 1, b = 2)
Run Code Online (Sandbox Code Playgroud)

我经常发现自己vec$a在应该写的时候通过写错误vec["a"]vec[["a"]]使用相应的名称(不带名称)访问相应的值。

我认为vec$a出现错误是违反直觉的,因为$通常会提取命名的事物。这种感觉甚至似乎得到了支持,例如在?Extract示例用法为的中x$name,这是否不完美地适合命名向量?

那让我开始思考是否可能使$运算符超负荷以处理命名向量。但是,我对R中的运算符重载不是很有经验,并且我了解(例如,从这里的答案)在重载基本运算符时应谨慎。

我的互连问题:有,为什么我不应该超载的原因$描述说我不理解?也就是说,在某种程度上,这不是R中的默认值吗?如果没有,我将如何明智地这样做

我了解实际上,即使只是出于可移植性的原因,这可能不是一个好主意,但我仍然很好奇。

r

5
推荐指数
1
解决办法
57
查看次数

寻找 dplyr 函数来有条件地应用过滤器

我有一个包含各种血液学值及其收集时间的数据框。这些值只能在特定时间收集,但偶尔会添加一个额外的值。我想删除在计划时间之外收集值的任何实例。

为了说明这个问题,这里有一些代码来创建我正在使用的数据框的一个非常简化的版本(加上一些示例时间表):

example <- tibble("Parameter" = c(rep("hgb", 3), rep("bili", 3), rep("LDH", 3)), 
                  "Collection" = c(1, 3, 4, 1, 5, 6, 0, 4, 8))

hgb_sampling <- c(1, 4)
bili_sampling <- c(1, 5)
ldh_sampling <- c(0, 4)

Run Code Online (Sandbox Code Playgroud)

因此,我需要一种方法来根据 Parameter 列中的值有条件地应用过滤器。该解决方案需要适合 dyplr 管道并产生如下内容:

filtered <- tibble("Parameter" = c(rep("hemoglobin", 2), rep("bilirubin", 2), rep("LDH", 2)), 
                  "Collection" = c(1, 4, 1, 5, 0, 4))
Run Code Online (Sandbox Code Playgroud)

我已经尝试了几件事(它们都类似于下面的内容),但是“参数”的使用会使事情出错:

df <- example %>%
  {if (Parameter == "hgb") filter(., Collection %in% hgb_sampling)} 
Run Code Online (Sandbox Code Playgroud)

有什么建议?

r dplyr tidyverse

5
推荐指数
0
解决办法
97
查看次数

igraph 中的最低共同祖先

假设我们有一棵树igraph

library(igraph)

g <- make_tree(14, children = 3)
plot(g, layout = layout_as_tree)
Run Code Online (Sandbox Code Playgroud)

reprex 包(v0.3.0)于 2019 年 12 月 21 日创建

我们如何找到任意节点集合的最低共同祖先(LCA)?也就是说,在上面的例子中

  1. 7 和 14 的 LCA 是 2。
  2. 6、9、12 和 14 的 LCA 为 1。
  3. 1 和 8 的 LCA 为 1。
  4. 任何节点的 LCA 都是它自己。

等等。

感觉应该有一种优雅的方式来做到这一点igraph,但我还没有找到。我尝试过调用 的交叉点all_simple_paths,但由于我没有获得每个节点级别的好方法,因此这没有帮助。

我知道许多系统发育包为其他数据结构实现了 这一点,但如果图表上有合理的解决方案,我宁愿避免相互转换。(但是,我对tidygraph解决方案非常满意。)

r graph-theory igraph tidygraph

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

在 Rust 特征绑定中需要交换操作

假设我有一组相关的非标量结构,在它们上定义了一个可交换的算术运算。例如,

struct Foo {
    a: f64,
    b: f64
}

impl Add<f64> for Foo {
    type Output = Foo;
    
    fn add(self, v: f64) -> Self::Output {
        Foo {
            a: self.a + v,
            b: self.b + v
        }
    }
}

impl Add<Foo> for f64 {
    type Output = Foo;
    
    fn add(self, foo: Foo) -> Self::Output {
        Foo {
            a: foo.a + self,
            b: foo.b + self
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我想利用这个操作在这组结构上实现一个特征。也就是说,我想要如下内容:

trait Bar: Add<f64, Output = Self> + Sized {
    fn right_add(self, f: …
Run Code Online (Sandbox Code Playgroud)

traits rust commutativity

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

仅为所有非零列绘制条形图

我有一个data.frame单条记录和一个 N 数字列。我想Rggplot.

例如:

df <- data.frame(a=1, b=0, c=10, d=20)
Run Code Online (Sandbox Code Playgroud)

我调换了data.frame但没有设法命名两列。

注意:虽然 Python 实现了相同的图sns

sns.barplot(x = 'Name', y = 'count', data*) 
Run Code Online (Sandbox Code Playgroud)

r ggplot2

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

标签 统计

r ×4

commutativity ×1

dplyr ×1

ggplot2 ×1

graph-theory ×1

igraph ×1

rust ×1

tidygraph ×1

tidyverse ×1

traits ×1