小编Gum*_*meo的帖子

在R中绘制表达式树

我知道我可以使用该substitute函数在R中创建表达式树.假设我生成以下表达式树:

expT <- substitute(a+(2*b+c))
Run Code Online (Sandbox Code Playgroud)

是否可以在R中可视化表达式树,产生如下内容:

表达树

我知道这(也是R中的一个函数,但是我想在情节中省略它.

plot r expression-trees

11
推荐指数
2
解决办法
986
查看次数

R中的S4级的一元加

我正在试验R中的S4类,我试图+为我的对象定义一个plus()运算符,即重载加号运算符.我设法重载二进制文件+,但我无法弄清楚如何重载一元加号.这是我想要实现的最小工作(一元运算符不工作)示例:

setClass("HWtest",
         representation(expr  = "character"),
         prototype = list(expr  = NA_character_)
)

H <- new("HWtest", expr="Hello")
W <- new("HWtest", expr="World")

setMethod("+", signature(e1="HWtest", e2="HWtest"),
          function(e1,e2){
            new("HWtest", 
                expr = paste(e1@expr," + ",e2@expr))
          }
)
Run Code Online (Sandbox Code Playgroud)

现在我可以使用+运算符并且它可以顺利运行:

H+W
An object of class "HWtest"
Slot "expr":
[1] "Hello  +  World"
Run Code Online (Sandbox Code Playgroud)

现在,一元加号当然不起作用,所以必须超载

+H
Error in +H : invalid argument to unary operator
Run Code Online (Sandbox Code Playgroud)

所以我尝试以下列方式重载它:

setMethod("+", signature(e="HWtest"),
          function(e){
            new("HWtest", 
                expr = paste("+ ",e@expr))
          }
)
Run Code Online (Sandbox Code Playgroud)

但这会产生错误:

Error in match.call(fun, fcall) : …
Run Code Online (Sandbox Code Playgroud)

r operator-overloading unary-operator s4

6
推荐指数
1
解决办法
283
查看次数

R中的抽象类型

我想在R中创建类,假设它是一个人的S4类.例如

setClass("Person", slots = list(name = "character", mood = "myMoodType"))
Run Code Online (Sandbox Code Playgroud)

现在我想创建myMoodType一个抽象类型,它只能取三个值"Happy","Sad"和"Unknown".

我知道我可以使用S4类的有效性来做这件事,并将心情作为一个字符类型,并通过验证提供的字符串是我列出的三个选项之一来检查有效性.但我想知道我是否可以定义一个抽象类型,例如julia,例如

abstract myMoodType
type Happy   <: myMoodType             end
type Sad     <: myMoodType             end
type Unknown <: myMoodType             end
Run Code Online (Sandbox Code Playgroud)

在R中解决这个问题的正确方法是什么?

r abstract-data-type s4 julia

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

R,覆盖/悬停摘要/工具提示中的交互式散点图作为用户提供的绘图功能

我一直在研究R中的交互式图.我知道有几个包可以创建交互式图,特别是散点图,但我正在寻找某种功能.

例如这个情节.可以将鼠标悬停在按钮上以获得该点后面数据的小数字摘要,即工具提示.

当您拥有包含更多变量的数据集时,通常可以从PCA中探索/可视化分数,或进行多维缩放(MDS).但是如果人们以交互方式绘制数据,就像上面的例子那样,当一个人在这一点上盘旋时,总结并没有给出如此多的信息,即只是一长串的数字.能够生成要显示的自定义绘图会更好,而不仅仅是显示数值.

所以我的问题是:

当一个人在一个散点图中的一个点上盘旋时,是否有可能(在R中可用的某些包中)生成一个可视摘要.这可能是一个条形图,或者只是一些用户指定的绘图函数,它从data.frame中取一行作为参数.

如果可行的话,那将有助于快速了解MDS的结果.

编辑:

以下是在虹膜数据集上执行MDS的一些代码:

library(ggplot2)
library(plotly)
d <- dist(iris[,-5]) # euclidean distances between the rows
fit <- cmdscale(d,eig=TRUE, k=2) # k is the number of dim

# Put coordinates and original data in one data.frame
x <- fit$points[,1]
y <- fit$points[,2]
pDat <- data.frame(x=x,y=y)
pDat <- cbind(pDat,iris)
p <- ggplot(pDat) + geom_point(aes(x,y))
ggplotly(p)
Run Code Online (Sandbox Code Playgroud)

首先,现在工具提示仅包括x,y坐标.我想工具提示包含原始4个变量的值.然后,我想将工具提示显示为条形图,而不是数据点后面的原始4个变量.MDS保留了数据点之间的距离,因此可以用鼠标逐渐悬停,并且看到条形图几乎连续变化,因为距离得以保留.在我的使用案例中,每个点后面有30个变量,因此条形图摘要提供的视觉信息比30个数值更多.

r ggplot2 plotly ggvis

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

R和C++之间的通信

我有一个用C++编写的程序,它计算似然函数的值,它依赖于大量数据.我希望能够从R调用函数来请求函数值(计算将花费很多时间在R中,并且C++程序已经很长时间来改变它,它大约是150K行代码).

我可以这样做来请求一个值,但随后C++应用程序终止,我必须重新启动它并再次加载所有数据,(这样做.c()).加载需要10-30秒,具体取决于似然函数和数据的模型,我在想是否有办法让C++应用程序保持活动状态,等待函数值的请求,所以我没有将所有数据读回内存.已经在C++应用程序中计算一个函数值需要大约半秒钟,这对于C++来说非常长.

我正在考虑使用pipe()这个,并问你这是否是一个可行的选择,还是我应该使用其他方法?用rcpp可以做到这一点吗?

我这样做是为了测试这个函数上R的最小化算法.

c++ communication r pipe rcpp

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

探测 MPI_Bcast 或 MPI_Send

我有一个程序,其中有一个主/从设置,并且我为主机实现了一些功能,将不同类型的数据发送到从机。有些函数发送到各个从站,但有些函数通过 MPI_Bcast 向所有从站广播信息。

我想在从站中只有一个接收功能,所以我想知道是否可以探测消息并知道它是否被广播或作为正常的阻塞消息发送,因为有不同的方法来接收广播的内容和内容已正常发送。

hpc mpi

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

使用基于状态的标签注释视频帧

我有一堆视频和深度图显示来自 Microsoft Kinect 的人体姿势。

我可以在视频中获得人类的骨架,但我想要做的是从这个骨架数据中识别出某个姿势。

为此,我需要用 0 或 1 注释视频中的每一帧,对应于“不良姿势”和“良好姿势”,即该帧具有二进制状态变量。

我希望能够在 matlab 中播放 avi 文件,然后按空格键在这两种状态之间切换,同时将状态变量添加到一个数组中,给出视频中每一帧的状态。

matlab中有没有可以做到这一点的工具?否则 matlab 不是限制,python、C++ 或任何其他语言都可以。

我一直在谷歌搜索,我发现的大部分东西都是用多边形注释单个帧。我想以视频常规帧速率的一半来执行此操作。

编辑:我使用了 miindlek 提供的解决方案,如果有人遇到这个问题,我决定分享一些东西。我需要在视频中查看我为每一帧分配的注释,因此我在显示视频时在视频的左上角做了一个小圆圈。希望这对以后的其他人有用。我还捕获了用 waitKey 按下的键,然后根据输出做一些事情。这允许在注释期间按下多个键。

import numpy as np
import cv2
import os
os.chdir('PathToVideo')

# Blue cicle means that the annotation haven't started
# Green circle is a good pose
# Red is a bad pose
# White circle means we are done, press d for that

# Instructions on how to use!
# Press space to swap between states, …
Run Code Online (Sandbox Code Playgroud)

python video matlab annotations computer-vision

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