> cor_vec <- apply(cbind(x, y), 1, cor)[1:n_group] Error in FUN(newX[, i], ...) : 要么同时设定'x'和'y',要么只设定矩阵式的'x',是什么错误
时间: 2023-07-16 12:11:46 浏览: 194
这个错误是因为在执行`apply()`函数时,你同时传递了`x`和`y`参数。但是`apply()`函数只能接受一个矩阵作为输入。要么你需要将`x`和`y`合并为一个矩阵,然后再传递给`apply()`函数,要么你只需要传递`x`参数给`apply()`函数,然后在`FUN`函数中使用`y`参数。以下是两种可能的解决方案:
1. 合并`x`和`y`为一个矩阵,然后再传递给`apply()`函数:
```
cor_vec <- apply(cbind(x, y), 1, function(row) cor(row[1:n], row[(n+1):(2*n)]))[1:n_group]
```
2. 只传递`x`参数给`apply()`函数,然后在`FUN`函数中使用`y`参数:
```
cor_vec <- apply(x, 1, function(row, y) cor(row, y[(n+1):(2*n)]), y=y)[1:n_group]
```
相关问题
> 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 的相关系数了。
cor_vec <- apply(cbind(x, y), 1, cor)[1:n_group] Error in FUN(newX[, i], ...) : 要么同时设定'x'和'y',要么只设定矩阵式的'x',是什么错误
这个错误是因为 `apply` 函数的第一个参数 `cbind(x, y)` 不符合要求。`apply` 函数要求传入的是一个矩阵或数组,但 `cbind(x, y)` 返回的是一个矩阵和一个向量的组合,不符合要求。解决方法是将 `x` 和 `y` 合并成一个矩阵,然后再将其传入 `apply` 函数。具体操作如下:
```r
dat <- cbind(x, y)
cor_vec <- apply(dat, 1, cor)[1:n_group]
```
这样就可以避免这个错误了。