小编Jor*_*eys的帖子

如何用优化的函数替换 R 中的 for 循环(lapply?)

我有一个数据框,每一行都有时间事件。在一行中,我有发送者的事件类型(typeid=1),另一行有接收者的事件(typeid=2)。我想计算发送方和接收方之间的延迟(时差)。

我的数据组织在 data.frame 中,如下面的快照所示:

dd[1:10,]
     timeid   valid typeid
1  18,00035 1,00000      1
2  18,00528 0,00493      2
3  18,02035 2,00000      1
4  18,02116 0,00081      2
5  18,04035 3,00000      1
6  18,04116 0,00081      2
7  18,06035 4,00000      1
8  18,06116 0,00081      2
9  18,08035 5,00000      1
10 18,08116 0,00081      2

calc_DelayVIDEO <- function (dDelay ){

        pktProcess <- TRUE
        nLost <- 0
        myDelay <- data.frame(time=-1, delay=-1, jitter=-1, nLost=-1)
        myDelay <- myDelay[-1, ]
        tini <- 0
        tend <- 0
        for (itr in c(1:length(dDelay$timeid))) { …
Run Code Online (Sandbox Code Playgroud)

loops r vectorization

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

在函数中使用sfApply时的范围问题(包降雪 - R)

让我在R中添加另一个范围问题,这次是降雪包.如果我在我的全局环境中定义一个函数,并且我稍后在另一个函数中的sfApply()中尝试使用该函数,则不再找到我的第一个函数:

#Runnable code. Don't forget to stop the cluster with sfStop()
require(snowfall)
sfInit(parallel=TRUE,cpus=3)

func1 <- function(x){
    y <- x+1
    y
}

func2 <- function(x){
    y <- sfApply(x,2,function(i) func1(i) )
    y
}

y <- matrix(1:10,ncol=2)
func2(y)
sfStop()
Run Code Online (Sandbox Code Playgroud)

这给出了:

> func2(y)
Error in checkForRemoteErrors(val) : 
  2 nodes produced errors; first error: could not find function "func1"
Run Code Online (Sandbox Code Playgroud)

如果我将我的函数嵌套在另一个函数中,它可以工作.当我在全局环境中使用sfApply()时,它也可以工作.事实是,我不想在函数2中嵌入我的函数func1,因为这会导致func1被定义多次(func2用于循环结构).

我已经尝试过简化代码以摆脱双循环,但由于问题的性质,这是不可能的.有任何想法吗?

r function scoping

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

R中的等频离散化

我在R中找到执行等频离散化的函数时遇到了麻烦.我偶然发现了'infotheo'软件包,但经过一些测试后发现算法被破坏了.CRAN似乎不再支持"dprep".

编辑:

为清楚起见,我不需要分隔箱之间的值.我真的想要相同的频率,如果一个值最终在两个箱中,则无关紧要.例如:

c(1,3,2,1,2,2) 
Run Code Online (Sandbox Code Playgroud)

应该给一个箱子c(1,1,2)和一个c(2,2,3)

r

5
推荐指数
3
解决办法
9284
查看次数

比较相同向量的相邻元素(避免循环)

我设法写了一个for loop比较以下向量中的字母:

bases <- c("G","C","A","T")
test <- sample(bases, replace=T, 20)
Run Code Online (Sandbox Code Playgroud)

test 将返回

[1] "T" "G" "T" "G" "C" "A" "A" "G" "A" "C" "A" "T" "T" "T" "T" "C" "A" "G" "G" "C"
Run Code Online (Sandbox Code Playgroud)

通过该功能,Comp()我可以检查字母是否与下一个字母匹配

Comp <- function(data)
{
    output <- vector()
    for(i in 1:(length(data)-1))
    {
    if(data[i]==data[i+1])
        {
        output[i] <-1
        }
        else
        {
        output[i] <-0
        }
    }
    return(output)
}
Run Code Online (Sandbox Code Playgroud)

导致;

> Comp(test)
 [1] 0 0 0 0 0 1 0 0 0 0 0 1 1 1 …
Run Code Online (Sandbox Code Playgroud)

r vector string-comparison sapply

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

如何在R-2.14中使用新的"ByteCompile"字段?

我想使用R 2.14中的'ByteCompile'字段.但是,"编写R扩展"仅描述此字段,但未说明应将其设置为什么值.我应该如何使用它?你有例子吗?

它与"LazyData:yes"相同吗?

我还在r-devel邮件列表上提出了这个问题.

packages r

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

为S3类定义show方法

我很震惊地发现该节目是S4通用的,而且我找不到使用S3调度来使show函数工作的方法.一个简单的演示:

> x <- 1:5
> xx <- structure(x,class="aClass")

> show.aClass <- function(object){
+     cat("S3 dispatching.\n")
+     print(object)
+ }

> xx
[1] 1 2 3 4 5
Run Code Online (Sandbox Code Playgroud)

没有S3在这里调度......

> setMethod("show","aClass",function(object){
+     cat("S4 dispatching.\n")
+     print(object)
+ })
in method for ‘show’ with signature ‘"aClass"’: no definition for class “aClass”
[1] "show"

> xx
[1] 1 2 3 4 5
Run Code Online (Sandbox Code Playgroud)

你觉得呢?

> print.aClass <- function(object){
+     cat("the print way...\n")
+     print(as.vector(object)) #drop class to avoid infinite loop!
+ }

> …
Run Code Online (Sandbox Code Playgroud)

r show s4

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

如何在Rd文件中使用roxygen2为S4方法自动填充使用标记

我有一个包含S3和S4方法组合的包(是的,我知道,但尝试为sort()编写一个S4,as.matrix()等等...).所以我坚持使用CRAN的经典roxygen2(版本2.2.2)

我注意到无论我尝试什么,我都无法在Rd文件中获得自动填充的用法标记.我知道我可以使用@usage手工完成,但我想保持自动化,因为我有一个相当广泛的代码库,我不想错过任何地方的标签.

一个例子:

#' A small test function
#' 
#' This function tests roxygen2
#' @param x that's right, it's called x
#' @param ... some more stuff
#' 
#' @rdname testfun-methods
#' @aliases testfun
#' @docType methods
#' @export
setGeneric("testfun",function(x,...) standardGeneric("testfun"))

#' @rdname testfun-methods
#' @aliases testfun,matrix-method
#' @return the matrix minus 1
setMethod("testfun","matrix",function(x,...){x - 1})

#' @rdname testfun-methods
#' @aliases testfun,numeric-method
#' @return a vector plus 1
setMethod("testfun","matrix",function(x,...){x + 1})
Run Code Online (Sandbox Code Playgroud)

如果我将它包装在一个包中,使用roxygen2(和RStudio,如果这很重要)进行roxygenize,并检查帮助文件,它看起来像这样:

\docType{methods}
\name{testfun}
\alias{testfun}
\alias{testfun,matrix-method}
\alias{testfun,numeric-method}
\title{A small …
Run Code Online (Sandbox Code Playgroud)

r help-files s4 roxygen2

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

从函数返回数据框并将其存储在工作区中

这是我与R合作的第一周,有一件事我似乎无法管理.

df <- data.frame(a = c(1:10),
             b = c("a", "a", "b", "c", "c", "b", "a", "c", "c", "b"))

testF = function(select) {
dum = subset(df, b == select)
}

lapply(unique(df$b), testF)
Run Code Online (Sandbox Code Playgroud)

此功能现在只是在屏幕上打印数据集.但我想将结果存储在我的工作区中作为单独的数据框.在这个例子中,这将给出三个数据帧; a,b和c.

谢谢你的帮助.

r return dataframe assign

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

如何创建在 R 包中使用的特定字体系列?

我需要运送一个带有图表的包裹,而客户坚持使用其自己的许可字体。这些图表必须呈现为 EPS 并发送给布局人员以获取报告。

我有该字体的 .ttf 文件,其名称如下:

  • 字体名称Sans-Bold.ttf
  • 字体名称Sans-Medium.ttf
  • 字体名称Serif-Bold.ttf
  • 字体名称Serif-Regular.ttf
  • ...

我还有这些文件的 .eot、.svg 和 .woff 版本。

所以我尝试了这个extrafont包:

ttf_import('Path/To/ttfFiles')
fonts()
[1] "FontNameSans-Bold"     "FontNameSans-Light"   
[3] "FontNameSans-Medium"   "FontNameSans-Regular" 
[5] "FontNameSerif-Bold"    "FontNameSerif-Light"  
[7] "FontNameSerif-Medium"  "FontNameSerif-Regular"
Run Code Online (Sandbox Code Playgroud)

我本来希望见到两个家庭,但这显然行不通。

最后,ttf 文件应该包含在该inst文件夹的子文件夹中,我应该有类似的内容:

.onLoad({
  font_import(file.path(system.file(package = 'mypackage'),
                        "fontdir")
  )
  # something else to create a family FontName for 
  # use with postscript() or cairo_ps()
  loadfonts()
})
Run Code Online (Sandbox Code Playgroud)

所以我可以稍后做:

setEPS()
postscript('somefile.eps', family = 'FontName Sans')
plot(mydata)
dev.off()
embed_fonts('somefile.eps', outfile = 'somefile-embedded.eps')
Run Code Online (Sandbox Code Playgroud)

问题:我需要采取哪些额外步骤才能让这些家庭像其他家庭一样提供服务?

编辑:我知道我必须先加载字体才能使用它们。但如果注册错误,我将无法加载家庭。问题是如何正确注册字体系列,以便其余部分正常工作。

fonts r truetype package

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

如何在 Shiny 中检测日期的空白输入

我的 R Shiny 应用程序中有一系列输入,我将它们用作函数的参数,以从数据框中选择特定数据。输入是 dateInput:

dateInput("dateSelect", "Date", format = "yyyy-mm-dd", value = NA)

在我的函数中,我需要指定 dateSelect 是空白还是未选中,以便能够选择所有日期。查看一个正常工作的示例,它不是日期,还有一个简单的 selectInput:

selectInput("teamSelect", "Team", choices = c("All", levels(newEffortstable$team)))

在函数中,这适用于选择“所有团队”:

    if(!missing(teamSelect)){
    if(teamSelect!="All"){
    selections[["teamEfforts"]] = 
    newEffortstable$effortNo[which(newEffortstable$team %in% teamSelect)]
    }else{
    selections[["teamEfforts"]] = newEffortstable$effortNo
    }
    }
Run Code Online (Sandbox Code Playgroud)

我已经尝试了以下NANULL" "并不断收到“如果错误:参数长度为零”

    if(!missing(dateSelect)){
    if(!dateSelect== "NA"){
    selections[["dateEfforts"]] = 
    newEffortstable$effortNo[which(newEffortstable$date == dateSelect)]
    }else{
    selections[["dateEfforts"]] = newEffortstable$effortNo
    }
    }
Run Code Online (Sandbox Code Playgroud)

谢谢!

r date shiny

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