在 R 中使用 c() 或 as.vector() 代替警告
Use c() or as.vector() instead warning in R
谁能解释为什么我有以下警告以及如何解决它?
我不明白为什么我有问题。看来最后的答案是正确的。
#Creating variance and covariance matrix
c <- diag(0.5, nrow = 4)
c[lower.tri(c)] <- c(0.2, -0.3, 0.2, 0.5, -0.4, -0.7)
d <- c + t(c)
e <- c(10, 12, 5, 18)
f<- outer(e, e) * d
f
#Defining expected return
mu7 <- c(10, -15, -15, 13)
#Define the value of lambda
labmda7 <- 0.8
#Define the benchmark portfolio weight
b7 <- c(0.2, 0.3, 0.4, 0.1)
#Solving alpha7
i <- c(1, 1, 1, 1)
alpha <- ( t(i) %*% solve(f) %*% mu7) / (t(i) %*% solve(f) %*% i)
xstar7 <- (1 / labmda7) * solve(f) %*% (mu7 - alpha * i )
warning:
Warning in alpha * i :
Recycling array of length 1 in array-vector arithmetic is deprecated.
Use c() or as.vector() instead.
注意:不要覆盖 R 函数,例如 c
。我给你重命名了。
您需要使用 as.vector
.
将数组转换为向量
代码:
x <- diag(0.5, nrow = 4)
x[lower.tri(x)] <- c(0.2, -0.3, 0.2, 0.5, -0.4, -0.7)
d <- x + t(x)
e <- c(10, 12, 5, 18)
f<- outer(e, e) * d
f
#Defining expected return
mu7 <- c(10, -15, -15, 13)
#Define the value of lambda
labmda7 <- 0.8
#Define the benchmark portfolio weight
b7 <- c(0.2, 0.3, 0.4, 0.1)
#Solving alpha7
i <- c(1, 1, 1, 1)
alpha <- ( t(i) %*% solve(f) %*% mu7) / (t(i) %*% solve(f) %*% i)
alpha <- as.vector(alpha)
xstar7 <- (1 / labmda7) * solve(f) %*% (mu7 - alpha * i )
或将最后两行替换为:
xstar7 <- (1 / labmda7) * solve(f) %*% (mu7 - as.vector(alpha) * i )
如你所见,我写 i <- as.vector(i)
也 alpha <- as.vector(alpha)
。
而现在输出没有警告,输出:
[,1] [,2] [,3] [,4]
[1,] 100 24.0 -15 36.0
[2,] 24 144.0 30 -86.4
[3,] -15 30.0 25 -63.0
[4,] 36 -86.4 -63 324.0
发出此警告是因为 alpha
是您最后一行中的矩阵。
xstar7 <- (1 / labmda7) * solve(f) %*% (mu7 - as.vector(alpha) * i )
如果您在矢量中进行变换,则不会出错。
谁能解释为什么我有以下警告以及如何解决它?
我不明白为什么我有问题。看来最后的答案是正确的。
#Creating variance and covariance matrix
c <- diag(0.5, nrow = 4)
c[lower.tri(c)] <- c(0.2, -0.3, 0.2, 0.5, -0.4, -0.7)
d <- c + t(c)
e <- c(10, 12, 5, 18)
f<- outer(e, e) * d
f
#Defining expected return
mu7 <- c(10, -15, -15, 13)
#Define the value of lambda
labmda7 <- 0.8
#Define the benchmark portfolio weight
b7 <- c(0.2, 0.3, 0.4, 0.1)
#Solving alpha7
i <- c(1, 1, 1, 1)
alpha <- ( t(i) %*% solve(f) %*% mu7) / (t(i) %*% solve(f) %*% i)
xstar7 <- (1 / labmda7) * solve(f) %*% (mu7 - alpha * i )
warning:
Warning in alpha * i :
Recycling array of length 1 in array-vector arithmetic is deprecated.
Use c() or as.vector() instead.
注意:不要覆盖 R 函数,例如 c
。我给你重命名了。
您需要使用 as.vector
.
代码:
x <- diag(0.5, nrow = 4)
x[lower.tri(x)] <- c(0.2, -0.3, 0.2, 0.5, -0.4, -0.7)
d <- x + t(x)
e <- c(10, 12, 5, 18)
f<- outer(e, e) * d
f
#Defining expected return
mu7 <- c(10, -15, -15, 13)
#Define the value of lambda
labmda7 <- 0.8
#Define the benchmark portfolio weight
b7 <- c(0.2, 0.3, 0.4, 0.1)
#Solving alpha7
i <- c(1, 1, 1, 1)
alpha <- ( t(i) %*% solve(f) %*% mu7) / (t(i) %*% solve(f) %*% i)
alpha <- as.vector(alpha)
xstar7 <- (1 / labmda7) * solve(f) %*% (mu7 - alpha * i )
或将最后两行替换为:
xstar7 <- (1 / labmda7) * solve(f) %*% (mu7 - as.vector(alpha) * i )
如你所见,我写 i <- as.vector(i)
也 alpha <- as.vector(alpha)
。
而现在输出没有警告,输出:
[,1] [,2] [,3] [,4]
[1,] 100 24.0 -15 36.0
[2,] 24 144.0 30 -86.4
[3,] -15 30.0 25 -63.0
[4,] 36 -86.4 -63 324.0
发出此警告是因为 alpha
是您最后一行中的矩阵。
xstar7 <- (1 / labmda7) * solve(f) %*% (mu7 - as.vector(alpha) * i )
如果您在矢量中进行变换,则不会出错。