有没有人知道在R中创建如下的矩阵的快速方法
[,1] [,2] [,3] [,4]
[1,] 1 1 1 1
[2,] 1 2 2 2
[3,] 1 2 3 3
[4,] 1 2 3 4
Run Code Online (Sandbox Code Playgroud)
上面的矩阵是4x4,我想创建类似10000x10000的东西.
我有一个矩阵:
a<-c(0,1,3,5,56,3)
b<-c(1,4,3,10,3,50)
c<-cbind(a,b)
c<-as.matrix(c)
Run Code Online (Sandbox Code Playgroud)
然后我创建了一个c的子集:
d<-c[1,1]
Run Code Online (Sandbox Code Playgroud)
我想获得d的专栏名称.colnames(d)不起作用.
下面,我将R函数的结果与我自己的代码进行比较.该算法简单地包括最大化许多参数的函数(这里,19).我的代码定义了函数和nlm优化用途.幸运的是,两者都返回相同的结果.但是,R功能非常快.因此,我怀疑我可以比使用nlm(或R中的类似优化例程)做得更好.任何的想法?
以下是一些可以使用Cox模型的生存数据.为此,需要最大化部分对数似然(维基百科链接中的第3个等式).
在R,这可以用coxph()(部分survival包)完成:
> library(survival)
> fmla <- as.formula(paste("Surv(time, event) ~ ",
+ paste(names(data)[-(1:3)], collapse=" +")))
> mod <- coxph(formula=fmla, data=data)
> round(mod$coef, 3)
x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15
-0.246 -0.760 0.089 -0.033 -0.138 -0.051 -0.484 -0.537 -0.620 -0.446 -0.204 -0.112 -0.089 -0.451 0.043
x16 x17 x18 x19
0.106 -0.015 -0.245 -0.653
Run Code Online (Sandbox Code Playgroud)
这可以通过显式写入部分对数似然并使用一些数值优化例程来检查.这是一些粗略的代码来完成这项工作.
代码已根据我收到的评论进行了编辑
> #------ minus …Run Code Online (Sandbox Code Playgroud) 我有一些与编写可以在矩阵和data.frames上工作的函数有关的问题.想象一下例如:
DoubleThatThing <- function(thing) {
stopifnot(is.matrix(thing) | is.data.frame(thing))
2 * thing
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:
是否存在矩阵或data.frame对象的通用术语?东西来取代Thing在DoubleThatThing.
是否有一个普遍接受或广泛使用的变量名称thing?
是is.matrix(thing) | is.data.frame(thing)测试此类对象的最佳方法吗?
我有一个名为good的列表,我想计算每个向量中两个值之间的差异.
good[1:2]
[[1]]
[1] 8 16 28 38 53
[[2]]
[1] 1 7 9 16 40
Run Code Online (Sandbox Code Playgroud)
所以我会得到另一个清单
good_dif1[1:2]
[[1]]
[1] 8 12 10 15
[[2]]
[2] 6 2 7 24
Run Code Online (Sandbox Code Playgroud)
如果我想要将NA插入第一个值,我该怎么做?
所以我会得到另一个清单
good_dif2[1:2]
[[1]]
[1] NA 8 12 10 15
[[2]]
[2] NA 6 2 7 24
Run Code Online (Sandbox Code Playgroud) 我有下表,该表original_table是通过比较相同索引 和 的数字对的频率得出的vector_1:vector_2
vector_1 <- c(5, 6, 5, 4, 6, 6, 4, 1, 6, 7, 5, 3, 3, 4, 4, 7, 7, 7, 2, 7, 2, 6, 1)
vector_2 <- c(1, 2, 1, 3, 4, 4, 4, 2, 4, 7, 2, 5, 5, 3, 3, 6, 7, 7, 6, 3, 6, 7, 2)
original_table <- table(vector_1, vector_2)
str(original_table)
vector_2
vector_1 1 2 3 4 5 6 7
1 0 2 0 0 0 0 0 …Run Code Online (Sandbox Code Playgroud) 也许我错过了一些明显的东西.
在R中,TRUE && NAevalues到NA.这对我来说没有意义,因为&&应该从左到右进行评估,并在其中一个条件成立时立即停止.
我试图在R中创建一个循环,在每两行中将我的矩阵替换为0×1,但我只能创建一个数字为1的矩阵.我不知道如何快速正确地实现它!
R代码
i<-1
r<-1
l<-1
repeat{
while(i<3){
if(l<7) {
r<-rbind(r,1)
l<-l+1
}else{
r<-cbind(r,1)
i<-i+1
l<-1
}
}
}
Run Code Online (Sandbox Code Playgroud)
开始示例矩阵
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
Run Code Online (Sandbox Code Playgroud)
最终矩阵:
1 0 0
1 0 0
0 1 0
0 1 0
0 0 1
0 0 1
Run Code Online (Sandbox Code Playgroud) 我有一个数据框,它由每个观察的变量列组成,这些列是行。我需要修剪这些数据以删除不需要的观察结果。
我通常如何做到这一点 -
trimmed_stats <- ddply(.data = data, .(pos), subset,
!AvgGFP > 100 &
!AvgRFP > 60 &
!Area < 220 &
!Area > 2000 &
!DeviationsRFP > 20 &
!DeviationGFP > 20)
Run Code Online (Sandbox Code Playgroud)
...基本上删除不符合特定标准的数据。
但是,当我查看多个数据集时,这些特定数字会因数据集而异。
我想要做的是使用与平均值的标准偏差执行“修剪”。
例如,让我们采用一个简单的数据框,每个观察值都有一个变量 -
p <- data.frame(obs = c(1:1000), var1 = rnorm(1000, 0 , 5))
sd(p[,2])
[1] 4.91213
Run Code Online (Sandbox Code Playgroud)
所以 1 个标准差是 4.91213,如何删除 var1 不在均值 1 个标准差范围内的所有行?
有没有办法转换这些数据:
(Intercept) Timecoursecdc15 Timecoursecdc28 Timecourseclb Timecoursecln
YAL001C FALSE FALSE FALSE FALSE FALSE
YAL002W FALSE FALSE FALSE FALSE FALSE
YAL003W FALSE FALSE FALSE FALSE FALSE
YAL004W FALSE FALSE FALSE FALSE FALSE
YAL005C FALSE FALSE FALSE FALSE FALSE
YAL007C FALSE FALSE FALSE FALSE TRUE
Run Code Online (Sandbox Code Playgroud)
这样的事情:
YPR163C YPR164W YPR165W YPR166C YPR167C YPR168W YPR169W YPR170C
FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE
YPR171W YPR172W YPR173C YPR174C YPR175W YPR176C YPR177C YPR178W
FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
YPR179C YPR180W YPR181C YPR182W YPR183W …Run Code Online (Sandbox Code Playgroud)