有没有办法在八度音程中对矩阵执行行方式操作?
我有一个(mXn)
整数矩阵,我可以获得一个m dimensional
向量,其中每个元素是相应行的最大元素吗?我怎么能在八度音中做到这一点?
假设您正在对二项式数据进行建模,其中每个响应是来自多个试验(N)的一些成功(y)以及一些解释变量(a和b).有一些函数可以做这种事情,它们似乎都使用不同的方法来指定y和N.
在glm中,你做glm(cbind(y,N-y)~a+b, data = d)
(LHS成功/失败的矩阵)
在inla,你做inla(y~a+b, Ntrials=d$N, data=d)
(分别指定试验次数)
在glmmBUGS中,你做glmmBUGS(y+N~a+b,data=d)
(指定成功+试验作为LHS的条款)
在编写新方法时,我一直认为最好遵循glm所做的,因为人们通常会首先遇到二项式响应数据.但是,我永远不会记得它cbind(y,N-y)
或者cbind(y,N)
- 我通常似乎在我的数据中有成功/数量的试验而不是成功/失败次数 - YMMV.
当然,其他方法也是可能的.例如,使用RHS上的函数来标记变量是试验次数还是失败次数:
myblm( y ~ a + b + Ntrials(N), data=d)
myblm( y ~ a + b + Nfails(M), data=d) # if your dataset has succ/fail variables
Run Code Online (Sandbox Code Playgroud)
或定义一个运算符只是做一个cbind,所以你可以这样做:
myblm( y %of% N ~ a + b, data=d)
Run Code Online (Sandbox Code Playgroud)
从而为LHS增添了一些含义,使其明确.
有没有人有更好的想法?这样做的正确方法是什么?
我有一个数据框,其中包含多个模型参数的多对估计和方差,每个模型参数都在一个部分中.这是一个生成说明性示例的函数:
samplerats <- function(){
set.seed(310366)
d = data.frame(section=c(rep("S1",10),rep("S2",10),rep("S3",5)))
nr = nrow(d)
for(i in 1:5){
d[[paste0("est_v",i)]] = rnorm(nr)
d[[paste0("var_v",i)]] = runif(nr)
}
d
}
Run Code Online (Sandbox Code Playgroud)
这是你得到的开始:
> d=samplerats()
> head(d)
section est_v1 var_v1 est_v2 var_v2 est_v3 var_v3
1 S1 0.3893008 0.1620882 -1.1915391 0.15439565 0.62022284 0.5487519
2 S1 0.8221099 0.3280630 0.7729817 0.14810283 -1.11337584 0.9947342
3 S1 0.8023230 0.1862810 -1.5285389 0.85648574 -1.74666907 0.4267944
4 S1 -0.2252865 0.5660111 -0.4348341 0.53013027 0.01823185 0.1379821
5 S1 -0.9475335 0.7904085 -1.0882961 0.40567780 1.69607397 0.3450983
6 S1 0.4415259 0.2969032 0.9200723 …
Run Code Online (Sandbox Code Playgroud) names(mydata)[names(mydata)=="q1"] <- "q01"
Run Code Online (Sandbox Code Playgroud)
我想同时选择2 mydata
,然后可以同时编辑它们。
一些高级文本编辑器允许您使用多个光标,例如,如果我在此行中同时选择“ mydata”,然后单击Delete并键入“ otherdata”,则最终得到:
names(otherdata)[names(otherdata)=="q1"] <- "q01"
Run Code Online (Sandbox Code Playgroud)
尽管这里可以通过简单的搜索和替换来完成,但是有时具有多个选择和多个光标可能会更容易。
Sublime Text编辑器可以做到这一点,Atom和Emacs也可以。
问题:我正在尝试使用 sf 包和geom_sf()
ggplot2创建美国州/县的地图,但我无法获得size
多边形边界线宽度的参数geom_sf()
以正确创建细线size < 1
(例如ggplot(sf_obj) %>% geom_sf(size = 0.5)
.
具体来说,一个州/县的边界线似乎从任意小的(例如size = 0.05
)一直到 具有相同的宽度size = 0.702
。然后在 处似乎有一个奇怪的截止点size = 0.702
,在该截止点上方边界线突然显得更宽。然后从size = 0.703
最多到size = 1
边界线似乎具有相同的宽度。对于size
> 1,正如预期的那样,边界线会逐渐变宽。
研究:它似乎geom_sf()
支持逐渐变化size
,如图中的代码对由Bob Rudis地图<1,在这里和马特Strimas-麦基这里。这似乎是我的问题可能是同一个参考这里GGPLOT2的Github的页面上标题为“geom_sf发小尺寸高达1”,但这个问题被关闭,我不知道是否/如何我可以实现我的机器上的修补程序。这里(和这里)还有另一个类似的问题,但哈德利建议在这种情况下问题可能出在图形设备/查看器上。我在 RStudio 和 RGUI 中复制了我的问题(以及上面链接的两个 Github 问题),但我不确定如何测试/更改我的图形设备/查看器。
版本信息:我使用的是 ggplot2_3.0.0、sf_0.6.3、R 版本 3.5.1、RStudio 版本 1.1.456 和 Windows 10 版本 …
假设我有两个列表,列表的相应元素是相同的形状:
e1=list(1,c(1,2,3),matrix(1:12,3,4))
e2=list(1,c(1,2,3),matrix(1:12,3,4))
Run Code Online (Sandbox Code Playgroud)
我想逐个元素地添加这两个列表.这是我的解决方案,适用于任何长度的列表和任何形状的元素,只要它们匹配并且是可添加的:
> esum
function(e1,e2){
e = list()
for(i in 1:length(e1)){
e[[i]]=e1[[i]]+e2[[i]]
}
e
}
> esum(e1,e2)
Run Code Online (Sandbox Code Playgroud)
但它看起来很丑陋,而且可能是一种可以在单行中完成的事情.
这是问题的第一阶段,实际上是要添加许多这些列表的完整列表,但是一旦定义了esum,它只是Reduce:
> ee = list(e1,e2,e1,e1,e2)
> Reduce(esum,ee)[[3]] # lets just check [[3]] for now
[,1] [,2] [,3] [,4]
[1,] 5 20 35 50
[2,] 10 25 40 55
[3,] 15 30 45 60
Run Code Online (Sandbox Code Playgroud)
那么,任何人都有这样的单线程?
是的我知道单行并不总是最好的东西.
没有名称的列表的名称返回NULL:
> names(list(1,2,3))
NULL
Run Code Online (Sandbox Code Playgroud)
但添加一个命名的东西,突然名称具有列表的长度:
> names(list(1,2,3,a=4))
[1] "" "" "" "a"
Run Code Online (Sandbox Code Playgroud)
因为这是一个命名列表.我想要的是一个函数,rnames说,将任何列表放入命名列表,这样:
rnames(list(1,2,3)) == c("","","")
identical(rnames(list()), character(0))
length(rnames(foo)) == length(foo) # for all foo
Run Code Online (Sandbox Code Playgroud)
和以下,这是姓名()所做的事情:
rnames(list(1,2,3,a=3)) == c("","","","a")
rnames(list(a=1,b=1)) == c("a","b")
Run Code Online (Sandbox Code Playgroud)
我目前的hacky方法是在列表中添加一个命名的东西,获取名称,然后将其删除:
rnames = function(l){names(c(monkey=1,l))[-1]}
Run Code Online (Sandbox Code Playgroud)
但有没有更好/正确的方法来做到这一点?
我们试图为R函数提供一种方法来处理一个模型,该模型具有多个响应,多个解释变量以及响应之间可能的共享参数.例如:
Y1 ~ X1 + X2 + X3
Y2 ~ X3 + X4
Run Code Online (Sandbox Code Playgroud)
指定两个响应和四个解释变量.X3出现在两者中,我们希望用户控制相关参数值是相同还是不同.即:
Y1 = b1 X1 + b2 X2 + b3 X3
Y2 = b3 X3 + b4 X4
Run Code Online (Sandbox Code Playgroud)
这是一个带有四个'b'参数的模型,或者
Y1 = b1 X1 + b2 X2 + b3 X3
Y2 = b4 X3 + b5 X4
Run Code Online (Sandbox Code Playgroud)
具有五个参数的模型.
两种可能性:
Foo( Y1+Y2 ~ X1 + X2 + X3 + X4 + X5, map=cbind(c(1,1,1,0),c(0,0,1,1)))
将对应于第一种情况,和
Foo( Y1+Y2 ~ X1 + X2 + X3 + X4 + X5, map=cbind(c(1,1,1,0,0),c(0,0,0,1,1)))
Run Code Online (Sandbox Code Playgroud)
将是第二个.显然,需要对LHS进行一些解析,或者可能需要解析 …
我正在尝试读取具有浮点值的复杂数据文件.已经提供了一些处理这种格式(Met Office PP文件)的C代码,并且它做了很多小事和交换.它不起作用.它得到了很多权利,比如数据的大小,但返回矩阵中的数值是无意义的,有NaN和像1e38和-1e38这样的值被大量洒落.
但是,我有一个二进制exe("convsh")可以将这些转换为netCDF,并且netCDF看起来很好 - 风速很好的旋涡图.
我在想的是PP文件的字节是以错误的顺序读入的.如果我可以将netCDF数据中正确返回的浮点数的字节与从C代码错误地返回的浮点数中的字节进行比较,那么我可能会找出正确的swappage.
那么是否有一个普通的R函数来转储浮点数的四个(或八个?)字节?就像是:
> as.bytes(pi)
[1] 23 54 163 73 99 00 12 45 # made up values
Run Code Online (Sandbox Code Playgroud)
搜索"bytes"和"float"和"binary"没有帮助.
它在C中的微不足道,我可能已经把它写在我写这篇文章的时候......
我无法将wordnet加载到R.我使用R x64 2.14.1.我安装了包wordnet,然后我尝试加载包.
> library(wordnet)
Warning message:
In initDict() :
cannot find WordNet 'dict' directory: please set the environment variable WNHOME to its parent
Run Code Online (Sandbox Code Playgroud)
怎么了?如何以及如何设置目录WNHOME.