我想用固定的向量划分矩阵的每一行.例如
mat<-matrix(1,ncol=2,nrow=2,TRUE)
dev<-c(5,10)
Run Code Online (Sandbox Code Playgroud)
给mat/dev分割各列由dev.
[,1] [,2]
[1,] 0.2 0.2
[2,] 0.1 0.1
Run Code Online (Sandbox Code Playgroud)
但是,我希望得到这个结果,即按行进行操作:
rbind(mat[1,]/dev, mat[2,]/dev)
[,1] [,2]
[1,] 0.2 0.1
[2,] 0.2 0.1
Run Code Online (Sandbox Code Playgroud)
到那儿有明确的命令吗?
我想加快我的引导功能,它本身运行得非常好.我读过,因为R 2.14有一个名为的软件包parallel,但我觉得这对某人很难.对计算机科学知识不足以真正实现它.也许有人可以提供帮助.
所以这里有一个引导程序:
n<-1000
boot<-1000
x<-rnorm(n,0,1)
y<-rnorm(n,1+2*x,2)
data<-data.frame(x,y)
boot_b<-numeric()
for(i in 1:boot){
bootstrap_data<-data[sample(nrow(data),nrow(data),replace=T),]
boot_b[i]<-lm(y~x,bootstrap_data)$coef[2]
print(paste('Run',i,sep=" "))
}
Run Code Online (Sandbox Code Playgroud)
目标是使用并行处理/利用我的PC的多个核心.我正在Windows下运行R. 谢谢!
编辑(诺亚回复后)
以下语法可用于测试:
library(foreach)
library(parallel)
library(doParallel)
registerDoParallel(cores=detectCores(all.tests=TRUE))
n<-1000
boot<-1000
x<-rnorm(n,0,1)
y<-rnorm(n,1+2*x,2)
data<-data.frame(x,y)
start1<-Sys.time()
boot_b <- foreach(i=1:boot, .combine=c) %dopar% {
bootstrap_data<-data[sample(nrow(data),nrow(data),replace=T),]
unname(lm(y~x,bootstrap_data)$coef[2])
}
end1<-Sys.time()
boot_b<-numeric()
start2<-Sys.time()
for(i in 1:boot){
bootstrap_data<-data[sample(nrow(data),nrow(data),replace=T),]
boot_b[i]<-lm(y~x,bootstrap_data)$coef[2]
}
end2<-Sys.time()
start1-end1
start2-end2
as.numeric(start1-end1)/as.numeric(start2-end2)
Run Code Online (Sandbox Code Playgroud)
但是,在我的机器上,简单的R代码更快.这是并行处理的已知副作用之一,即它会导致开销过程,这会增加像这样的"简单任务"中的时间吗?
编辑:在我的机器上,parallel代码比"简单"代码长约5倍.当我增加任务的复杂性(例如增加boot或n)时,这个因素显然不会改变.那么代码或我的机器可能存在问题(基于Windows的处理?).
我是新手使用git,目前使用以下组合:
直到最近,这种组合才能很好地将代码拉到存储库.但现在我不能再推送修改后的代码,也不能在R-studio中提交它.在R-studio中,修改后的代码用蓝色M标记,旁边有一个复选框.我不能再查看此框用于暂存,提交和推送了.当我点击它时,它确实没有检查和反应.
当我创建一个显示为黄色问号的新代码片段时?我可以检查并推送它,但无法再检查修改后的版本.
我已经卸载了git和R-studio并重新安装但问题仍然存在.我还创建了一个新的存储库,但问题也出现在新的存储库中.我是一个有点无能哪里开始寻找soluation和网络搜索并没有屈服,除了讨论了许多成果在这里,我不能完全跟随,因为它也许不完全适用于我的问题.在任何情况下,当我给
> Sys.which('git')
Run Code Online (Sandbox Code Playgroud)
R回报:
git
""
Run Code Online (Sandbox Code Playgroud)
我很感激建议从哪里开始.
当使用带有值rbind的两个时,我对R强制变量类型的方式有疑问.我举例说明:data.framesNA
x<-factor(sample(1:3,10,T))
y<-rnorm(10)
dat<-data.frame(x,y)
NAs<-data.frame(matrix(NA,ncol=ncol(dat),nrow=nrow(dat)))
colnames(NAs)<-colnames(dat)
Run Code Online (Sandbox Code Playgroud)
现在的目标是追加dat,并NAs同时保持变量类型factor和numeric中x和y.当我给:
dat_forward<-rbind(dat,NAs)
is.factor(dat_forward$x)
Run Code Online (Sandbox Code Playgroud)
这很好用.但是后向使用rbind失败:
dat_backward<-rbind(NAs,dat)
is.factor(dat_backward$x)
is.character(dat_backward$x)
Run Code Online (Sandbox Code Playgroud)
现在x被强迫角色等级.我很困惑 - 即使我使用其他绑定顺序,也不能保留因子类型?为实现目标,我的代码会有什么直接的变化?
我在Rstudio中使用R 3.3.1的Win7 OS.意图是glmnet与并行处理一起使用.从?glmnet帮助:
parallel:如果TRUE,使用平行的foreach适合每个折叠.必须事先注册并行,例如doMC或其他.请参阅下面的示例.
从引用的例子:
# Parallel
require(doMC)
registerDoMC(cores=4)
Run Code Online (Sandbox Code Playgroud)
install.packages('doMC')返回包不可用.手动检查CRAN可提供可下载的UNIX代码,但Windows二进制文件不可用.
我仍然可以doMC在我的Win7操作系统下使用相同的代码或什么是有用的替代方案?
我想在一个绘图中添加一个表达式,其中出现一个条件术语,例如E(Y | X).使用例如:
plot(x=c(.5),ylim=c(0,1),xlim=c(0,2))
text(x=1,y=.5,labels=expression(E(X|Y)),pos=1)
Run Code Online (Sandbox Code Playgroud)
不这样做,但它产生E(|(X,Y)).显然我不知道如何正确地将垂直条放入表达式 - 有人可以帮忙吗?谢谢.
我可能已经发现了一些类型的错误polr的功能(序/多分回归)MASS库R。问题似乎与对象coef()上的使用有关summary,但也许不是。
问题发生在一个类型的函数中:
pol_me <- function(d){
some_x <- d[,1]
mod <- polr(some_x ~ d[,2])
pol_sum <- summary(mod)
return(pol_sum)
}
Run Code Online (Sandbox Code Playgroud)
为了说明,我模拟了序数回归模型的一些数据。
set.seed(2016)
n=1000
x1 <- rnorm(n)
x2 <- 2*x1 +rnorm(n)
make_ord <- function(y){
y_ord <- y
y_ord[y < (-1)] <- 1
y_ord[y >= (-1) & y <= (1)] <- 2
y_ord[y >= 1] <- 3
y_ord <- as.factor(y_ord)
}
x1 <- make_ord(x1)
dat <- data.frame(x1,x2)
Run Code Online (Sandbox Code Playgroud)
当我们现在调用函数时:
library(MASS)
pol_me(d = dat)
Run Code Online (Sandbox Code Playgroud)
我们得到错误
Error …Run Code Online (Sandbox Code Playgroud) 我有一个问题,即表示[0,1]区间总和的概率的变量之和0应该是>0.问题肯定与浮点表示和精度有关R,但我无法确定它出错的地方.
options(digits = 22)
p1 = 0.8
p2 = 0.9999999999999998
p11 = p1 * p2
p10 = p1 - p11
p01 = p2 - p11
p00 = 1 - p11 - p10 - p01
Run Code Online (Sandbox Code Playgroud)
p11, p10, p01都是numeric.p00也numeric不过
> p00
[1] 0
Run Code Online (Sandbox Code Playgroud)
和p00 == 0是TRUE我的机器上.但是它不应该是零,因为它可以证明p00是>0数学.
这个问题似乎与p01小的事实有关.不过p01>0是TRUE仍然适用我的机器上.为什么在拿到最后一笔钱时会出错p00?
是否有一个数字技巧来解决这个问题,即得到一个精确的表示p00 …
我的目标是定义一个R用于安装和搜索库的路径.我读到这可以通过更改安装路径中的Rprofile.site文件来完成R.我在那里尝试了两个命令:
.libPaths("D:/RLibrary")
.Library.site <- file.path("D:/RLibrary")
Run Code Online (Sandbox Code Playgroud)
其中我甚至在阅读了帮助文件后也没有完全理解其中的差异.
但是,在启动之后R,仍然会在两个位置查找库.
.libPaths()
[1] "D:/RLibrary" "C:/Program Files/R/R-3.3.1/library"
Run Code Online (Sandbox Code Playgroud)
为什么这样,以及如何仅将库路径更改为我想要的路径?
我想在Python/numpy中的矩阵中索引列向量,并将其作为列向量而不是1D数组返回.
x = np.array([[1,2],[3,4]])
x[:,1]
>array([2, 4])
Run Code Online (Sandbox Code Playgroud)
给予
np.transpose(x[:,1])
不是解决方案.在numpy.transpose文档之后,这将返回行向量(1-D数组).