小编Ari*_*man的帖子

R并行扩展是否打破了`apply`这个比喻?

每当我在R中看到关于并行处理的问题时,它就会使用该foreach函数.由于for循环不是很像R,是否有并行版本apply,如果是这样,为什么它不是更受欢迎?

parallel-processing r apply

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

强制包的功能使用用户提供的功能

我遇到了一个问题MNP,我跟踪了一个不幸的调用deparse(最大宽度限制为500个字符).

背景(如果你感到无聊,可轻松跳过)

因为mnp使用一些特殊的语法来允许变化的选择集(包含cbind(choiceA,choiceB,...)在公式定义中),我的公式调用的左侧在model.matrix.default调用deparse它时是1700个字符左右.由于deparse最多支持width.cutoff500个字符,因此该sapply(attr(t, "variables"), deparse, width.cutoff = 500)[-1L]model.matrix.default的第一个元素为:

[1] "cbind(plan1, plan2, plan3, plan4, plan5, plan6, plan7, plan8, plan9, plan10, plan11, plan12, plan13, plan14, plan15, plan16, plan17, plan18, plan19, plan20, plan21, plan22, plan23, plan24, plan25, plan26, plan27, plan28, plan29, plan30, plan31, plan32, plan33, plan34, plan35, plan36, plan37, plan38, plan39, plan40, plan41, plan42, plan43, plan44, plan45, plan46, plan47, plan48, plan49, plan50, plan51, …
Run Code Online (Sandbox Code Playgroud)

debugging r

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

如何正确地输入国际化文本?

我有很多来自国外的作者姓名用CSV,R读得很好.我正在尝试清理它们以便上传到Mechanical Turk(它真的不喜欢一个国际化的角色).这样做,我有一个问题(稍后会发布),但我甚至dput不能以合理的方式表达它们:

> dput(df[306,"primauthfirstname"])
"Gwena\xeblle M"
> test <- "Gwena\xeblle M"
<simpleError in nchar(val): invalid multibyte string 1>
Run Code Online (Sandbox Code Playgroud)

换句话说,dput工作得很好,但粘贴结果失败了.为什么不dput输出必要的信息以允许复制/粘贴回R(可能它需要做的就是在结构语句中添加编码属性?).我怎么做到这一点?

请注意,\xeb就R而言,这是一个有效的字符:

> gsub("\xeb","", turk.df[306,"primauthfirstname"] )
[1] "Gwenalle M"
Run Code Online (Sandbox Code Playgroud)

但是你不能单独评估字符 - 它是十六进制代码\ x ##或者什么都没有:

> gsub("\\x","", turk.df[306,"primauthfirstname"] )
[1] "Gwena\xeblle M"
Run Code Online (Sandbox Code Playgroud)

r internationalization

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

将S4调度添加到基本R S3泛型

我正在尝试添加一个merge需要为S4 的空间方法(因为它会调度两个不同对象的类型).

我尝试使用如下的早期解决方案:

#' Merge a SpatialPolygonsDataFrame with a data.frame
#' @param SPDF A SpatialPolygonsDataFrame
#' @param df A data.frame
#' @param \dots Parameters to pass to merge.data.frame
#' 
#' @export
#' @docType methods
#' @rdname merge-methods
setGeneric("merge", function(SPDF, df, ...){
  cat("generic dispatch\n")
  standardGeneric("merge")
})
#' @rdname merge-methods
#' @aliases merge,SpatialPolygonsDataFrame,data.frame-method
setMethod("merge",c("SpatialPolygonsDataFrame","data.frame"), function(SPDF,df,...) {
  cat("method dispatch\n")
})
Run Code Online (Sandbox Code Playgroud)

哪个工作:

x <- 1
class(x) <- "SpatialPolygonsDataFrame"
y <- data.frame()
> merge(x,y)
generic dispatch
method dispatch
Run Code Online (Sandbox Code Playgroud)

你将不得不相信我,如果x实际上是一个SPDF而不是伪造的,它不会返回你实际运行该代码时得到的插槽错误(或者没有,只是使用更宽松的通用以下不会返回错误).SPDF是一种痛苦的创造.

问题是它似乎覆盖了S3调度:

> …
Run Code Online (Sandbox Code Playgroud)

r s4

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

正式单元测试的优点仅仅是写了很多例子?

R有三个著名开发单元测试包,RUnit,svUnit,和testthat.Base R在其包功能中内置了示例,如果它们无法正确解析,则会返回错误.

我相信那些人的意见是单元测试比编写大量示例更好,但我不能完全理解单元测试中的任何特定功能,这些功能在示例中无法复制.

在R中使用单元测试框架的哪些特性使其优于使用包示例的特殊等效?

对于那些不是来自R世界的人,请注意,每次构建包时都会运行包中每个函数的示例,并且程序员会因任何警告或错误而受到影响.

unit-testing r

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

enet()工作但不是通过caret :: train()运行时

我正在尝试运行一个弹性网.从LASSO开始,然后从那里开始.我可以让它直接运行但是当我尝试traincaret包中运行相同的参数时它会失败.我想开始train工作,以便我可以用它来评估模型参数.

# Works
test <- enet( x=x, y=y, lambda=0, trace=TRUE, normalize=FALSE, intercept=FALSE )
# Doesn't
enetGrid <- data.frame(.lambda=0,.fraction=c(.01,.001,.0005,.0001))
ctrl <- trainControl( method="repeatedcv", repeats=5 )
> test2 <- train( x, y, method="enet", tuneGrid=enetGrid, trControl=ctrl, preProc=NULL )
  fraction lambda RMSE Rsquared RMSESD RsquaredSD
1    1e-04      0  NaN      NaN     NA         NA
2    5e-04      0  NaN      NaN     NA         NA
3    1e-03      0  NaN      NaN     NA         NA
4    1e-02      0  NaN      NaN     NA         NA
Error in train.default(x, y, method …
Run Code Online (Sandbox Code Playgroud)

r machine-learning r-caret

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

在同一图中交错和堆叠的geom_bar?

我有以下图表,它基本上是两个分布的直方图并排绘制:

my.barplot <- function( df, title="", ... ) {
  df.count <- aggregate( df$outcome, by=list(df$category1,df$outcome), FUN=length )
  colnames( df.count ) <- c("category1","outcome","n")
  df.total <- aggregate( df.count$n, by=list(df.count$category1), FUN=sum )
  colnames( df.total ) <- c("category1","total")
  df.dens <- merge(df.count, df.total)
  df.dens$dens <- with( df.dens, n/total )
  p <- ggplot( df.dens, aes( x=outcome, fill=category1 ), ... )
  p <- p + geom_bar( aes( y=dens ), position="dodge" )
  p <- p + opts( axis.text.x=theme_text(angle=-90,hjust=0), title=title )
  p
}

N <- 50*(2*8*2)
outcome <- sample(ordered(seq(8)),N,replace=TRUE,prob=c(seq(4)/20,rev(seq(4)/20)) ) …
Run Code Online (Sandbox Code Playgroud)

r ggplot2

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

ggplot2/colorbrewer有125个类别的定性调色板

我的数据如下:

  • 10个州
  • 每个州有两种类型
  • 每种类型都有1到29个实体
  • 每个州实体类型都有一个计数

完整的数据作为要点.

我试图想象出每个实体的计数比例.为此,我使用了以下代码:

icc <- transform( icc, state=factor(state), entity=factor(entity), type=factor(type) )
p <- ggplot( icc, aes( x=state, y=count, fill=entity ) ) +
  geom_bar( stat="identity", position="stack" ) +
  facet_grid( type ~ . )
custom_theme <- theme_update(legend.position="none")
p
Run Code Online (Sandbox Code Playgroud)

情节

不幸的是,我丢失了很多信息,因为具有大量实体的状态类型没有显示足够的独特颜色.

如上所述,我有125个实体,但是状态类型中的大多数实体是29.有没有办法强制ggplot2和colorbrewer在每个实体类型中分配一个唯一的(并且希望相当不同)颜色?

到目前为止,我想出的唯一方法是强制entity转换一个整数,它可以工作但不会在关卡之间提供很多颜色区分.

r ggplot2 colorbrewer

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

用于在data.table中删除单个列的习惯用法

我需要从包含几百列的data.frame中删除一列.

有了data.frame,我会习惯性subset地做到这一点:

> dat <- data.table( data.frame(x=runif(10),y=rep(letters[1:5],2),z=runif(10)),key='y' )
> subset(dat,select=c(-z))
            x y
 1: 0.1969049 a
 2: 0.7916696 a
 3: 0.9095970 b
 4: 0.3529506 b
 5: 0.4923602 c
 6: 0.5993034 c
 7: 0.1559861 d
 8: 0.9929333 d
 9: 0.3980169 e
10: 0.1921226 e
Run Code Online (Sandbox Code Playgroud)

显然这仍然有效,但它似乎不是一个非常类似data.table的习语.我可以手动构建一个我想保留的列名列表,这似乎更像一些data.table:

> dat[,list(x,y)]
            x y
 1: 0.1969049 a
 2: 0.7916696 a
 3: 0.9095970 b
 4: 0.3529506 b
 5: 0.4923602 c
 6: 0.5993034 c
 7: 0.1559861 d
 8: 0.9929333 d
 9: …
Run Code Online (Sandbox Code Playgroud)

r data.table

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

如何加速R中的文本搜索?

我有一个大文本向量我想搜索特定的字符或短语.正则表达式将永远存在.我该如何快速搜索?

样本数据:

R <- 10^7
garbage <- replicate( R, paste0(sample(c(letters[1:5]," "),10,replace=TRUE),collapse="") )
Run Code Online (Sandbox Code Playgroud)

optimization r

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