Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取在矩阵列上交替使用for循环的错误_R - Fatal编程技术网

获取在矩阵列上交替使用for循环的错误

获取在矩阵列上交替使用for循环的错误,r,R,我有一个矩阵,它有一个列名和一个列值。 我正在尝试对每个值列执行lillie.test 到目前为止,我所做的工作如下: library("nor test") # create a data d <- data.frame( v1 = letters[1:10], v2 = runif(10), v3 = LETTERS[1:10],v4 = rnorm(10), v5 = letters[1:10], v6 = runif(10), v7 = LETTERS[1:10], v8 = rn

我有一个矩阵,它有一个列名和一个列值。 我正在尝试对每个值列执行lillie.test

到目前为止,我所做的工作如下:

library("nor test")
# create a data
d <- data.frame( v1 = letters[1:10], v2 = runif(10), v3 = LETTERS[1:10],v4 = rnorm(10), v5 = letters[1:10], v6 = runif(10), v7 = LETTERS[1:10], v8 = rnorm(10), stringsAsFactors = TRUE)
# make the sequence 
bm = seq(4, length(d), by=2)
# make an empty matrix 
results <- matrix(0,length(d),2)
# run the loop 
for (i in 2:bm) {
  results[i] <- lillie.test(d[,i])
}
当我运行for循环时,我得到了很多错误,但是当我对每一列应用lillie测试时,我没有看到任何错误

当我在每一列上运行函数时,我会得到无错误的输出 比如说

 results <- lillie.test(d[,2])
 results

#   Lilliefors (Kolmogorov-Smirnov) normality test

#data:  d[, 2]
#D = 0.2996, p-value = 0.01133

结果让我们检查一下这行:

for (i in 2:bm)
看起来还可以,但事实并非如此。让我们打印
bm

bm
[1] 4 6 8
你看,
bm
不是一个整数。我怀疑您希望将2与bm连接起来(从data.set判断),因此您可以这样做:

bm <- c(2, bm)
bm
[1] 2 4 6 8
您正在对字母运行测试(第三列包含字符串!)

解决这一问题的快速方法是:

bm <- seq(4, length(d), by=2) ## as you have typed
bm <- c(2, bm)
results <- sapply(d[bm], lillie.test)
你能做到的

bm = seq(2, length(d), by=2)
res<- lapply(d[bm], lillie.test)
m<- do.call(cbind, res)
mresults <- m[1:2,]
print(mresults)

#          v2        v4        v6        v8       
#statistic 0.1724419 0.1113228 0.2189569 0.1650759
#p.value   0.5447331 0.9777699 0.1902882 0.6148843
bm=seq(2,长度(d),by=2)

由于我无法在安装R时使用该库,请评论这是否是您期望的结果。我使用的是一个等价物,但它给了我一个不同的结果d[,2],谢谢你的评论,如果我做'bm=seq(2,length(d),by=2',然后是'results我根据你的解决方案更新了问题,请看上面的内容。我更新了我的答案,我将其转换为data.frame,然后我只保留数字,如你的示例所示。
bm <- seq(2, 8, 2)
2:bm
[1] 2 3 4
bm <- seq(4, length(d), by=2) ## as you have typed
bm <- c(2, bm)
results <- sapply(d[bm], lillie.test)
df <- data.frame(matrix(unlist(results), nrow=4, byrow=F))[c(1,2), ]
bm = seq(2, length(d), by=2)
res<- lapply(d[bm], lillie.test)
m<- do.call(cbind, res)
mresults <- m[1:2,]
print(mresults)

#          v2        v4        v6        v8       
#statistic 0.1724419 0.1113228 0.2189569 0.1650759
#p.value   0.5447331 0.9777699 0.1902882 0.6148843