每当我在R中看到关于并行处理的问题时,它就会使用该foreach
函数.由于for
循环不是很像R,是否有并行版本apply
,如果是这样,为什么它不是更受欢迎?
我遇到了一个问题MNP
,我跟踪了一个不幸的调用deparse
(最大宽度限制为500个字符).
背景(如果你感到无聊,可轻松跳过)
因为mnp
使用一些特殊的语法来允许变化的选择集(包含cbind(choiceA,choiceB,...)
在公式定义中),我的公式调用的左侧在model.matrix.default
调用deparse
它时是1700个字符左右.由于deparse
最多支持width.cutoff
500个字符,因此该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) 我有很多来自国外的作者姓名用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) 我正在尝试添加一个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有三个著名开发单元测试包,RUnit
,svUnit
,和testthat
.Base R在其包功能中内置了示例,如果它们无法正确解析,则会返回错误.
我相信那些人的意见是单元测试比编写大量示例更好,但我不能完全理解单元测试中的任何特定功能,这些功能在示例中无法复制.
在R中使用单元测试框架的哪些特性使其优于使用包示例的特殊等效?
对于那些不是来自R世界的人,请注意,每次构建包时都会运行包中每个函数的示例,并且程序员会因任何警告或错误而受到影响.
我正在尝试运行一个弹性网.从LASSO开始,然后从那里开始.我可以让它直接运行但是当我尝试train
在caret
包中运行相同的参数时它会失败.我想开始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) 我有以下图表,它基本上是两个分布的直方图并排绘制:
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) 我的数据如下:
完整的数据作为要点.
我试图想象出每个实体的计数比例.为此,我使用了以下代码:
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
转换一个整数,它可以工作但不会在关卡之间提供很多颜色区分.
我需要从包含几百列的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 <- 10^7
garbage <- replicate( R, paste0(sample(c(letters[1:5]," "),10,replace=TRUE),collapse="") )
Run Code Online (Sandbox Code Playgroud) r ×10
ggplot2 ×2
apply ×1
colorbrewer ×1
data.table ×1
debugging ×1
optimization ×1
r-caret ×1
s4 ×1
unit-testing ×1