小编Jor*_*eys的帖子

使用r和weka.如何使用元算法和nfold评估方法?

这是我的问题的一个例子

library(RWeka)
iris <- read.arff("iris.arff")
Run Code Online (Sandbox Code Playgroud)

执行nfolds以获得分类器的正确准确度.

m<-J48(class~., data=iris)
e<-evaluate_Weka_classifier(m,numFolds = 5)
summary(e)
Run Code Online (Sandbox Code Playgroud)

这里提供的结果是通过使用部分数据集构建模型并使用另一部分进行测试获得的,因此可以提供准确的精度

现在我执行AdaBoost来优化分类器的参数

m2 <- AdaBoostM1(class ~. , data = temp ,control = Weka_control(W = list(J48, M = 30)))
summary(m2)
Run Code Online (Sandbox Code Playgroud)

这里提供的结果是通过使用相同的数据集来构建模型以及用于评估模型的相同数据集获得的,因此精度不能代表我们使用模型评估其他实例的实际精度.然而,此过程有助于优化构建的模型.

主要问题是我无法优化构建的模型,同时使用未用于构建模型的数据对其进行测试,或者仅使用nfold验证方法来获得正确的精度.

r machine-learning data-mining weka

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

从S4类定义中的包中识别S3(?)类

我有一些麻烦从S4类定义中识别出来自旧包的类.我继续得到错误

Error in makePrototypeFromClassDef(properties, ClassDef, immediate, where) : 
  in making the prototype for class "Tsvmm" elements of the prototype failed to 
  match the corresponding slot class: dates (class "dates" )
In addition: Warning message:
undefined slot classes in definition of "Tsvmm": dates(class "dates") 
Run Code Online (Sandbox Code Playgroud)

一个可重复的例子:

require(chron)

setClass(
  Class="Tsvmm",
  representation=representation(
      data  = "data.frame",
      dates = "dates"
  ),
  prototype=prototype(
      data  = data.frame(),
      dates = chron(0)
  )
)
Run Code Online (Sandbox Code Playgroud)

尝试时class(chron(0)),答案是"dates" "times".使用is.numeric(chron(0)),答案是TRUE.然而,当我将插槽日期类设置为时"numeric",我得到相同的错误而没有警告消息.

我觉得我忽略了一些明显的东西,但我还没有在文档中找到它.有人指点吗?

PS:我知道chron包装至少是特殊的,但我有充分的理由使用它.另外,其他包可能会出现问题.将此视为一般问题的示例.所以,请不要告诉我使用Date或POSIXt类.那是我现在正在使用的黑客.

r class definition s4

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

在数据帧中成对计算有效观测数(无NA)

假设我有这样的数据框:

Df <- data.frame(
    V1 = c(1,2,3,NA,5),
    V2 = c(1,2,NA,4,5),
    V3 = c(NA,2,NA,4,NA)
)
Run Code Online (Sandbox Code Playgroud)

现在我想计算两个变量的每个组合的有效观察数.为此,我写了一个函数sharedcount:

sharedcount <- function(x,...){
    nx <- names(x)
    alln <- combn(nx,2)
    out <- apply(alln,2,
      function(y)sum(complete.cases(x[y]))
    )
    data.frame(t(alln),out)
}
Run Code Online (Sandbox Code Playgroud)

这给出了输出:

> sharedcount(Df)
  X1 X2 out
1 V1 V2   3
2 V1 V3   1
3 V2 V3   2
Run Code Online (Sandbox Code Playgroud)

一切都很好,但功能本身在大数据帧上需要很长时间(600个变量和大约10000个观测值).我有一种感觉,我正在监督一种更简单的方法,特别是因为cor(...,use ='pairwise')运行起来要快得多,而且必须做类似的事情:

> require(rbenchmark)    
> benchmark(sharedcount(TestDf),cor(TestDf,use='pairwise'),
+     columns=c('test','elapsed','relative'),
+     replications=1
+ )
                           test elapsed relative
2 cor(TestDf, use = "pairwise")    0.25     1.0
1           sharedcount(TestDf)    1.90     7.6
Run Code Online (Sandbox Code Playgroud)

任何提示都表示赞赏.


注意:使用Vincent的技巧,我编写了一个返回相同数据框的函数.代码在我的答案中.

r missing-data dataframe

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

如何从RStudio小工具中打开Shiny应用程序

我正在开发一个捆绑了一组应用程序的软件包,并且我想拥有一个RStudio插件,该插件可让您根据分类选择应用程序。这个应用程式是一个闪亮的小工具,是闪亮应用程式的特殊迷你版本。

问题是:

  • 我不能runApp在另一个应用程序内使用,这给了错误。
  • 我无法退回要启动的应用程序,因为我尝试了并且它没有执行任何操作。

在小工具服务器功能中,我具有以下代码:

observeEvent(input$done,{
      theapp <- shinyAppDir("Dir/to/app")
      stopApp(theapp)
    })
Run Code Online (Sandbox Code Playgroud)

但无济于事。我可以将应用程序作为返回值,但是由于某种原因它不会自动打开。

r rstudio shiny

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

你可以通过do.call使用fix吗?

我有一些代码,它是更方便的调用fix通过do.call,而不是直接.任何旧数据框都适用于此示例:

dfr <- data.frame(x = 1:5, y = letters[1:5])
Run Code Online (Sandbox Code Playgroud)

显而易见的第一次尝试是

do.call("fix", list(dfr))
Run Code Online (Sandbox Code Playgroud)

不幸的是,这失败了

Error in fix(list(x = 1:5, y = 1:5)) : 'fix' requires a name
Run Code Online (Sandbox Code Playgroud)

所以,我们给它一个名字:

do.call("fix", list(dfr = dfr))
Run Code Online (Sandbox Code Playgroud)

这次失败了

Error in is.name(subx) : 'subx' is missing
Run Code Online (Sandbox Code Playgroud)

为了记录,edit也不起作用.

dfr <- do.call("edit", list(dfr = dfr))
Run Code Online (Sandbox Code Playgroud)

请问有人能想出明智的解决方法吗?

编辑:经过反思,我忘记了fix总是把它的答案转移到全局环境中,这对于测试示例来说很好,但对于使用函数却不太好.约书亚的优秀解决方法并没有延伸到使用edit.

对于奖励积分,你如何edit通过do.call

r do.call

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

对于R中的循环问题

希望我能够很好地解释我的问题以获得答案 - 任何帮助将不胜感激.

我有一个数字,如果数据文件,我需要合并为一个.我使用for循环来执行此操作并添加一个列,指示它是哪个文件.

在这种情况下,有6个文件,每个文件最多包含100个数据条目.

当有6个文件时,我没有问题让它运行.

但是当我有更少的问题时.

我想要做的是使用for循环来测试文件,并使用for循环变量来组装一个引用存在的文件的向量.

我似乎无法获得新变量来组合for循环变量的新值.

这是我到目前为止编写的示例代码.

for ( rloop1 in 1 : 6) {
ReadFile=paste(rloop1,SampleName,"_",FileName,"_Stats.csv", sep="")
if (file.exists(ReadFile))
**files_found <- c(rloop1)**
}
Run Code Online (Sandbox Code Playgroud)

我正在寻找的是files_found将包含那些文件,其中1 ... 6对找到的文件有效.

关心史蒂夫

for-loop r file

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

类似于excel vlookup

嗨,
我有一个10年,5分钟的粉尘浓度分辨率数据集,
我有一个15年的数据集与天气分类的天气分类我怎么能结合这两个数据集他们不是相同的长度或分辨率
这里是一个数据样本

> head(synoptic)
        date synoptic
1 01/01/1995        8    
2 02/01/1995        7    
3 03/01/1995        7    
4 04/01/1995       20    
5 05/01/1995        1   
6 06/01/1995        1       
>    
head(beit.shemesh)
  X........................ StWd  SHT PRE  GSR RH Temp  WD  WS PM10  CO   O3    
1                        NA   64 19.8   0 -2.9 37 15.2  61 2.2  241 0.9 40.6    
2                        NA   37 20.1   0  1.1 38 15.2 344 2.1  241 0.9 40.3    
3                        NA   36 20.2   0  0.7 39 15.1  32 1.9  241 0.9 39.4    
4 …
Run Code Online (Sandbox Code Playgroud)

lookup r

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

如何在格子图中按因子绘制两条线?

限定:

df <- data.frame(
        line1 = rep(seq(1,5,by=1),2), 
        line2 = rep(seq(2,6,by=1),2),
        index = rep(seq(1,5,by=1),2),
        factor=rep(c("a","b"),each=5))
Run Code Online (Sandbox Code Playgroud)

其中line1line2是两个变量,比如身高和体重.

这是我想要的每个面板的简单样式(我还想更改点标记的大小,但不使用如何):

plot(df$line1[df$factor=="a"], type = "o", ylim=c(0,6))
lines(df$line2[df$factor=="a"], type = "o", lty=2, pch=0)
Run Code Online (Sandbox Code Playgroud)

当我尝试这个:

library(lattice)
xyplot(c(line1,line2)~index|factor,data=df,type="o")
Run Code Online (Sandbox Code Playgroud)

该程序将所有点视为属于一行.

此外,我不知道如何提供绘图样式的参数来获得所需的结果.

PS1.令人惊讶的是,我已经用Google搜索并发现了许多散点图(线性拟合,密度等)和格子图的直方图示例,但这不是我想要做的简单事情之一.

PS2.我想标记这个问题,trellis但没有声誉点来创建标记.有志愿者吗?

r ggplot2 lattice trellis

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

闪亮的小部件,以更改向量中的元素的顺序

在很多网站上,您都有一个拖放界面来更改列表中元素的顺序.我正在寻找类似Shiny的东西.我希望用户能够拖放列表的元素以通过更改顺序来更改优先级.

现在我有一个滥用的解决方案selectizeInput().这有效,但当选择列表变大时,它很快变得很麻烦.

举例说明:

library(shiny)

shinyApp(
  ui = shinyUI({
    fluidPage(
      title = "Example for ordering objects",
      sidebarLayout(
        sidebarPanel(uiOutput("selection"),
                     actionButton('update',"Update")),
        mainPanel(
          helpText('The order of elements'),
          tableOutput('theorder')
        )
      )
    )
  }),
  server = function(input, output, session) {
    values <- reactiveValues(x = c('Item1','Item2','Item3'))

    output$selection <- renderUI({
      selectizeInput('neworder',
                     'Select new order',
                     choices = values$x,
                     multiple = TRUE)
    })

    output$theorder <- renderTable(
      values$x
    )

    observeEvent(input$update,{
      id <- values$x %in% input$neworder
      values$x <- c(input$neworder, values$x[!id])
    })
  }
)
Run Code Online (Sandbox Code Playgroud)

缺点:要更改列表末尾的顺序,用户必须以正确的顺序选择整个列表.一个错误,他必须重新开始.

愿望清单:一个闪亮的小部件(可能来自另一个包),最好是拖放,这可以使这种动作更方便.

drag-and-drop r shiny

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

将列添加到Shiny中的反应数据框架并更新它们

我希望能够通过将一列除以另一列,并通过用户输入选择两个原始列来计算新的数据列。我想将此计算的数据加入到原始表(或它的副本)中。

我设法弄清楚了如何对列输入选择做出反应,并且设法进行了将一列除以另一列的计算,但是我无法制作出包含所有列的最终数据框。原始列和新计算列。

这是我使用内置的Iris数据制作的模型。它显示在第一个表中选择的列的数据,并在第二个表中显示计算(您将需要向下滚动才能看到此信息)。

如何将计算所得的数据加入原始数据源?

非常感谢

#Ui        
pageWithSidebar(
      headerPanel('Calculate Column'),
      sidebarPanel(

        #select variables from iris dataset
        selectInput('xcol', 'X Variable', names(iris)),
        selectInput('ycol', 'Y Variable', names(iris),
                    selected=names(iris)[[2]])
      ),
      mainPanel(
        #display the selected variables
            tableOutput("view"),
         #display the calculated variable
            tableOutput("view2")
      )
    )


#Server
        function(input, output, session) {

      # Combine the selected input variables into a new data frame
      selectedData <- reactive({
        iris[, c(input$xcol, input$ycol),]
      })


      # divide one variable selection by the other
      selectedData2 <- reactive({
                iris$new<-iris[, c(input$xcol)]/iris[, c(input$ycol)]

        })

      # create data output …
Run Code Online (Sandbox Code Playgroud)

r dataframe shiny

3
推荐指数
2
解决办法
4462
查看次数