小编Bac*_*lin的帖子

如何为 knn 模型绘制 ROC 曲线

我正在使用 ROCR 包,我想知道如何在 R 中为 knn 模型绘制 ROC 曲线?有没有办法用这个包来绘制这一切?

不知道怎么用knn的ROCR的预测功能。这是我的示例,我使用来自 UCI 存储库的 isolet 数据集,我将类属性重命名为 y:

cl<-factor(isolet_training$y)
knn_isolet<-knn(isolet_training, isolet_testing, cl, k=2, prob=TRUE)
Run Code Online (Sandbox Code Playgroud)

现在我的问题是,传递给 ROC 预测函数的参数是什么。我尝试了以下两种不起作用的替代方法:

library(ROCR)
pred_knn<-prediction(knn_isolet$y, cl)
pred_knn<-prediction(knn_isolet$y, isolet_testing$y)
Run Code Online (Sandbox Code Playgroud)

r knn roc

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

将对象传递给函数而不在复制时复制它

我的问题

如果将对象x传递给f修改它的函数,则R将xf环境中创建修改后的本地副本,而不是更改原始对象(由于复制更改原则).但是,我有一个x非常大的情况,一旦传递到它就不需要了f,所以我想避免存储x一次f调用的原始副本.有没有一种聪明的方法来实现这一目标?

f 是一个未知的功能,由一个可能不是很聪明的用户提供.

我目前的解决方案

到目前为止,我所拥有的最好的是包装x一个函数forget,该函数x调用一个新的本地引用y,删除工作空间中的原始引用,然后传递新的引用.问题是,我不确定它是否达到了我想要的效果,而且只能用于globalenv(),这在我目前的情况下是一个交易破坏者.

forget <- function(x){
    y <- x
    # x and y now refers to the same object, which has not yet been copied
    print(tracemem(y))
    rm(list=deparse(substitute(x)), envir=globalenv())
    # The outside reference is now removed so modifying `y`
    # should no longer result in a copy (other than the
    # intermediate …
Run Code Online (Sandbox Code Playgroud)

memory-management r

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

mac os 10.9.1上的mysql-python

我似乎无法在10.9.1上安装mysql-python.我怀疑它与最新的命令行工具更新有关但我不是专家:

Running MySQL-python-1.2.5/setup.py -q bdist_egg --dist-dir /var/folders/s7/j138zlt172nf6qqpn98rhzhm0000gn/T/easy_install-kq86vo/MySQL-python-1.2.5/egg-dist-tmp-edndmM
clang: error: unknown argument: '-mno-fused-madd' [-Wunused-command-line-argument-hard-error-in-future]
clang: note: this will be a hard error (cannot be downgraded to a warning) in the future
error: Setup script exited with error: command 'cc' failed with exit status 1
Run Code Online (Sandbox Code Playgroud)

知道怎么克服这个吗?

pip也有同样的错误.

compiler-construction pip easy-install mysql-python

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

启动时检测R会话是否在RStudio中运行

我在终端和RStudio中(在Mac和Linux上)都使用R,想知道两者是否可以使用不同的.Rprofiles,或者最好使用相同的库,.Rprofile但使用不同的环境特定的调整脚本。

我以为将以下代码放入我的目录中是可行的.Rprofile,但是不幸的session_info是在.First运行时未设置该代码。都不是Sys.getenv

.First <- function(){
    # [STUFF I ALWAYS WANT TO DO]
    # Load my favourite packages
    # Set CRAN mirror
    # etc. etc.

    # [ENVIRONMENT SPECIFIC TWEAKS]
    if(grepl("RStudio", session_info()$platform$ui)){
        tryCatch(source("~/.R_RStudio"), error=print)
    } else {
        tryCatch(source("~/.R_terminal"), error=print)
    }
}
Run Code Online (Sandbox Code Playgroud)

我还尝试了设置alias R='R --args terminal'.bash_profile该设置的确允许我检测会话是否从bash启动,但是它搞砸了,R CMD ...并且任何脚本都使用其他命令行参数。

我意识到,可能无法从R会话的起始位置进行检测,但是也许RStudio中有一些我不知道的聪明选择。

session r rstudio

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

使用自定义格式字符串的时间戳

我将数据从BigQuery移动到Oracle数据库,并试图找到处理时间戳的最佳方法.Oracle DB只能导入日期为小端格式(dd/mm/yyyy hh:mi:ss)的csv文件,但默认情况下BigQuery仅支持big endian(yyyy-mm-dd hh:mi:ss).

SELECT
  t,
  STRING(t) s
FROM
  (SELECT TIMESTAMP(132456789101112) t)
Run Code Online (Sandbox Code Playgroud)
Row   t                         s
1     1974-03-14 01:33:09 UTC   1974-03-14 01:33:09.101112
Run Code Online (Sandbox Code Playgroud)

我当然可以提取时间戳的不同组件并手动将它们粘贴在一起(见下文)或编写一些聪明的UDF,但如果没有任何方法可以使用BigQuery的标准功能,我会感到惊讶.这似乎是一件很平常的事情,我实际上犹豫要求一些时间.

SELECT
  t,
  CONCAT(
    RIGHT(CONCAT("0", STRING(DAY(t))), 2), "/",
    RIGHT(CONCAT("0", STRING(MONTH(t))), 2), "/",
    RIGHT(CONCAT("000", STRING(YEAR(t))), 4), " ",
    TIME(t)
  ) s
FROM
  (SELECT TIMESTAMP(132456789101112) t)
Run Code Online (Sandbox Code Playgroud)
Row   t                         s    
1     1974-03-14 01:33:09 UTC   14/03/1974 01:33:09
Run Code Online (Sandbox Code Playgroud)

是否有类似FORMAT(t, "dd/mm/yyyy hh:mi:ss")的方法或使用regexp的方法?(无需连续几个REGEXP_EXTRACT.)

google-bigquery

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

将向量减少到R中的常见非NA值

我对R很新,所以答案可能很明显,但到目前为止,我只找到了不匹配的类似问题的答案,或者我无法将其转化为我的答案.

要求: 我有两个相同长度的向量,包含数值和NA值,可能如下所示:

[1] 12  8 11  9 NA NA NA

[1] NA  7 NA 10 NA 11  9
Run Code Online (Sandbox Code Playgroud)

我现在需要的是两个向量,它们只包含那些不在NA两个原始向量中的值,因此在这种情况下,结果应如下所示:

[1] 8 9

[1] 7 10
Run Code Online (Sandbox Code Playgroud)

我正在考虑简单地在循环中浏览向量,但数据集非常大,所以我希望能更快地解决这个问题...我希望有人可以帮助我...

r vector na

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

在"TRUE"之间计算"FALSE"的有效方法

我有一个逻辑向量

v <- c(FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, TRUE)
Run Code Online (Sandbox Code Playgroud)

我想计算FALSE每个之间的数量TRUE.对于上面的例子,期望的结果是

3 2 1 4
Run Code Online (Sandbox Code Playgroud)

理想情况下,答案不会使用迭代方法.我的实际应用是一个更大的逻辑向量.效率越高越好.

谢谢!

r

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

将不规则的数据框收集到键值列中

我最近发现了如何创建衣衫褴褛的数据帧使用的I功能,但其很难与它们集成tidyr,ggplot2以及Hadleyverse的其余部分.更具体地说,如何将包含命名向量的列收集到键值列中?

假设我创建了一个这样的数据框

make.vector <- function(length.out){
    x <- sample(9, length.out)
    names(x) <- switch(length.out,
        "Alice",
        c("Bob", "Charlie"),
        c("Dave", "Erin", "Frank"),
        c("Gwen", "Harold", "Inez", "James"))
    x
}
mydf <- data.frame(Game = gl(3, 3, labels=LETTERS[1:3]),
                   Set = rep(1:3, 3),
                   Score = I(lapply(rep(2:4, each=3), make.vector)))
Run Code Online (Sandbox Code Playgroud)

生产

> print(mydf)
  Game Set      Score
1    A   1       8, 3
2    A   2       2, 8
3    A   3       3, 8
4    B   1    1, 5, 4
5    B   2    2, 3, …
Run Code Online (Sandbox Code Playgroud)

r dataframe tidyr

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

Foreach抛出%dopar%的错误,但使用%do%成功执行

我试图使用foreach和将以下代码转换为并行%dopar%.

library(doSNOW)
library(foreach)
cl<- makeCluster(4, type = "SOCK")
registerDoSNOW(cl)

min_subid <- c()
max_subid <- c()
p_typ <- c()
p_nm <- c()
st_tm<-c()
end_tm <- c()
supp <- c()
chart_type <- c()

foreach(j =1:noOfPhases)    %dopar%
{
  start_time    <-phases[j, colnames(phases)=="StartTime"]
  end_time      <-phases[j, colnames(phases)=="StopTime"]
  phase_type    <-phases[j, colnames(phases)=="Phase_Type_Id"]
  phase_name    <-phases[j, colnames(phases)=="Phase_Name"]
  suppress      <-phases[j, colnames(phases)=="Suppression_Time"]
  chart_typ     <-phases[j, colnames(phases)=="chartType"]

  conft<-(masterData$Time.Subgroup>=start_time & masterData$Time.Subgroup<=end_time)

  masterData[which(conft), colnames(masterData)=="Phase_Type"]<-phase_type
  masterData[which(conft), colnames(masterData)=="Phase_Name"]<-phase_name

  min_subid <- rbind(min_subid, min(which(conft)))
  max_subid <- rbind(max_subid, max(which(conft)))
  p_typ     <- rbind( p_typ, masterData$Phase_Type[min(which(conft))])
  p_nm      <- rbind( …
Run Code Online (Sandbox Code Playgroud)

parallel-processing r

0
推荐指数
1
解决办法
736
查看次数