> data <- matrix(rnorm(250000, mean = 0, sd = 1), ncol = 25) > correlation <- apply(data, MARGIN = 1, FUN = function(x) cor(x[1:13], x[14:25])) Error in cor(x[1:13], x[14:25]) : 不兼容的量度是什么错误
时间: 2023-07-16 13:11:35 浏览: 75
这个错误通常是由于向量长度不一致导致的。在这里,您正在计算每一行前13列和后12列之间的相关性,但是如果某一行的列数小于25,则会出现此错误。您可以通过添加一个条件来确保只有在行中有25个元素时才计算相关性,如下所示:
```
data <- matrix(rnorm(250000, mean = 0, sd = 1), ncol = 25)
correlation <- apply(data, MARGIN = 1, FUN = function(x) {
if(length(x) == 25) {
cor(x[1:13], x[14:25])
} else {
NA
}
})
```
这将在行中有25个元素时计算相关性,并在其它情况下返回NA。
相关问题
> set.seed(123) # 设置随机数种子,保证每次运行结果一致 > n_groups <- 10000 # 组数 > n_obs <- 25 # 每组观察值数量 > x <- matrix(rnorm(n_groups * n_obs), ncol = n_obs) # 生成X随机数矩阵 > y <- matrix(rnorm(n_groups * n_obs), ncol = n_obs) # 生成Y随机数矩阵 > cor_vec <- apply(cbind(x, y), 1, cor) # 计算每组X和Y的相关系数 Error in FUN(newX[, i], ...) : 要么同时设定'x'和'y',要么只设定矩阵式的'x'是什么错误
这个错误提示是因为 apply 函数的第一个参数必须是矩阵,而你把两个向量(x和y)拼接成了一个矩阵,apply 函数会把这个矩阵的每一行(代表每一组)作为参数传递给 FUN 函数。然而,cor 函数需要同时传入 x 和 y,而 apply 函数只传递了一行,所以就会报错。
要解决这个问题,可以把 x 和 y 拼接成一个大矩阵,然后再用 apply 函数计算每一组的相关系数。代码如下:
```
set.seed(123) # 设置随机数种子,保证每次运行结果一致
n_groups <- 10000 # 组数
n_obs <- 25 # 每组观察值数量
x <- matrix(rnorm(n_groups * n_obs), ncol = n_obs) # 生成X随机数矩阵
y <- matrix(rnorm(n_groups * n_obs), ncol = n_obs) # 生成Y随机数矩阵
xy <- cbind(x, y) # 将X和Y拼接成一个大矩阵
cor_vec <- apply(xy, 1, function(row) cor(row[1:n_obs], row[(n_obs+1):(2*n_obs)])) # 计算每组X和Y的相关系数
```
这样,就可以得到每一组 X 和 Y 的相关系数了。
在运行以下代码时:library(caret) set.seed(123) # 生成50*30的随机数据 data <- matrix(rnorm(50*30), nrow=50) # 生成三组不同的原始模型系数 coef1 <- rnorm(30) coef2 <- rnorm(30, mean=2) coef3 <- rnorm(30, sd=0.5) # 生成响应变量 y <- rnorm(50) # 计算CV值 ctrl <- trainControl(method="cv", number=5) cv <- train(x=data, y=y, method="lm", trControl=ctrl) # 画出CV error图和Prediction error图 par(mfrow=c(1,2)) plot(cv, main="CV Error Plot") plot(cv$pred, y, main="Prediction Error Plot") # 基于一倍标准差准则给出参数值上限 param_max <- coef1 + 1*sd(coef1)。出现了以下问题:Error in trainControl(method = "cv", number = 5) : could not find function "trainControl"。请对原代码进行修正
在运行 `trainControl` 函数之前需要先载入 `caret` 包。因此,需要在代码开头添加 `library(caret)`。
以下是修正后的代码:
```R
library(caret)
set.seed(123)
# 生成50*30的随机数据
data <- matrix(rnorm(50*30), nrow=50)
# 生成三组不同的原始模型系数
coef1 <- rnorm(30)
coef2 <- rnorm(30, mean=2)
coef3 <- rnorm(30, sd=0.5)
# 生成响应变量
y <- rnorm(50)
# 计算CV值
ctrl <- trainControl(method="cv", number=5)
cv <- train(x=data, y=y, method="lm", trControl=ctrl)
# 画出CV error图和Prediction error图
par(mfrow=c(1,2))
plot(cv, main="CV Error Plot")
plot(cv$pred, y, main="Prediction Error Plot")
# 基于一倍标准差准则给出参数值上限
param_max <- coef1 + 1*sd(coef1)
```
说明:我们在代码开头添加了 `library(caret)`,然后执行了生成随机数据、生成原始模型系数、生成响应变量等操作。接着,我们计算了CV值、画出了CV error图和Prediction error图,并基于一倍标准差准则给出了参数值的上限。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)