我有一个由IWebElement elm = driver.FindElement(By.XPath("/html/body/div[2]/div[2]/table[1]/tbody/tr[2]"));
和nrow = 100
组成的矩阵,我想打印每一行。
ncol = 5
我尝试使用循环打印每一行,但出现错误:
d1 <- rnorm(100, 0, 1)
d2 <- rnorm(100, 0, 1)
d3 <- rnorm(100, 0, 1)
d4 <- rnorm(100, 0, 1)
d5 <- rnorm(100, 0, 1)
x <- cbind(d1, d2, d3, d4, d5)
x
m <- nrow(x)
n <- ncol(x)
y <- matrix(x, m, n)
y
我的目标是我想从每一行计算hodges lehmann估算器。因为我有100行,意思是说我将有100个估算器。这里我把编码的例子计算为第1行的hodges lehmann估计量。
for(i in 1:100){
f[i] = y[i, ]
}
这就是为什么我更喜欢使用循环。谢谢你们。
答案 0 :(得分:0)
这应该能够做到你需要的技巧:
funfun=function(f){s=outer(f,f,"+")/2;median(s[lower.tri(s,T)])}
apply(data,1,funfun)
一些解释:
您的代码获取相隔一定距离的元素的平均值: 例如,如果你i == j然后只是对角线,我们将拥有元素本身。 例如,如果i = j + 1,或j = i + 1,那么它是(f [i] + f [i + 1])/ 2。那是你的代码。 ETC:
根据你上面提供的功能,如果我的f = 1:5,那么我会得到:
a1 a2 a3 a4 a5
[1,] 1 1.5 2 2.5 3
[2,] 2 2.5 3 3.5 NA
[3,] 3 3.5 4 NA NA
[4,] 4 4.5 NA NA NA
[5,] 5 NA NA NA NA
>
现在我写了一笔钱funfun
。如果我在1:5运行此功能,我得到:
s=outer(f,f,"+")/2
s
[,1] [,2] [,3] [,4] [,5]
[1,] 1 1.5 2.0 2.5 3.0
[2,] NA 2.0 2.5 3.0 3.5
[3,] NA NA 3.0 3.5 4.0
[4,] NA NA NA 4.0 4.5
[5,] NA NA NA NA 5.0
你看到了什么区别?那么结果只是相同的安排。在你的情况下,i == j是第一列,而在我的情况下,i == j是对角线。在你的情况下,i = j + 1或j = i + 1是第二列,而我的是偏离对角线。如果你想完全像你的那样,我们会做
s[col(s)==row(s)+1]
[1] 1.5 2.5 3.5 4.5
现在这与第二列完全相同。你看到了吗?。
好了,现在已经创建了该函数,按行遍历整个数据:
我们甚至可以修改funfun,如果你只是了解供应而不是外部:
funfun1=function(m){
n=1:length(m)
d=sapply(n,function(x)`length<-`((m[x]+m[x>=n])/2,length(m)))
median(d,na.rm=T)}
apply(data, 1, funfun1)
答案 1 :(得分:0)
使用问题中提供的'x',我们可以使用新的'estimatorHL'函数来简化这一过程,该函数可以简化索引。
estimatorHL <- function(rowIn) {
#initialize
a <- NULL
n <- length(rowIn)
k <- 1
for (i in 1:n) {
for (j in i:n) {
a[k] <- (rowIn[i] + rowIn[j])/2
k <- k + 1
}}
HLout <- median(a)
return(HLout)
}
然后我们将这个函数应用于'x'中的每一行,只有一行:
HL_estimateAll <- apply(x, 1, estimatorHL)
R中的用户定义函数可以真正简化,并且非常强大。