r - 如何在 R 中的父函数中编写两个或多个具有不同大小写的子函数
问题描述
我想编写一个函数来计算方阵的行列式是一个2x2
或3x3
一个函数,这样如果它的用户只提供 4 个元素,它将把它变成 2x2,如果它的用户提供 9 个元素,它将使用 3x3功能。这是我对 2x2 和 3x3 的功能:
matrix(1:4, ncol=2)
# [,1] [,2]
#[1,] 1 3
#[2,] 2 4
A_22 <- function(x11, x12, x21, x22) {
(x11 * x22) - (x12 * x21)
}
A_22(x11 = 1, x12 = 2, x21 =3, x22 = 4)
#[1] -2
cbind(1,1:3,c(2,0,1))
# [,1] [,2] [,3]
#[1,] 1 1 2
#[2,] 1 2 0
#[3,] 1 3 1
A_33 <- function(x11, x12, x13, x21, x22, x23, x31, x32, x33) {
(x11 * x22 * x33) + (x12 * x23 * x31) + (x13 * x21 * x33) - (x31 * x22 * x13) - (x32 * x23 * x11) - (x33 * x21 * x12)
}
A_33(x11 = 1, x12 = 1, x13 = 2, x21 = 1, x22 = 2, x23 = 0, x31 = 1, x32 = 3, x33 = 1)
#[1] -1
我查看了这个解决方案,但它仅适用于使用不同的方法来解决问题,而不是处理不同案例的问题。
将 和 的两种不同情况结合到父函数的优雅方式是A_22
什么A_33
?
解决方案
请检查这是否解决了您的问题:
Det_fn <- function(x){
if(nrow(x)!=ncol(x)) {
print("Undefined")
} else
if(nrow(x)==1 && ncol(x)==1) {
DET <- x[1,1]; DET
} else
if(nrow(x)==2 && ncol(x)==2) {
DET <- x[1,1]*x[2,2]-x[1,2]*x[2,1]; DET
} else
for(j in 1:ncol(x)){
DET[j] <- (((-1)^(1+j))*x[1,j]*Det_fn(x[-1,-j]))
}
DET
sum(DET)
}
如果我理解正确,您想以某种递归方式在函数内部调用相同的函数:矩阵计算的行列式示例是最相关的,因为它涉及嵌套for
循环并在同一个函数内调用行列式函数。我已经更新了函数来纠正一些错误,现在我可以计算这个,例如:
x <- matrix(1:16, ncol=4); x
在函数中,如果列数和行数不同,则函数返回一条消息,指示行列式未定义。如果矩阵中有单个元素,则行列式是该元素的值。接下来显示 2X2 情况的行列式。当矩阵大于 2X2 时,它使用递归计算行列式...请尝试一下,如果这能解决问题,请告诉我。
推荐阅读
- firebase - 我可以在 Firebase 本地模拟器上为 Firebase 功能设置重试配置吗?
- python - 我无法在 Visual Studio voce 上的 python 中运行打开的 CV,但如果我在其他文本编辑器(Atom,sublime)中运行,我可以正常工作
- python - GET request 404 error (not found) 这是我在调用同一文件夹中存在的文件时遇到的错误
- javascript - 在本地主机上运行 docker 容器不起作用
- kubernetes - 是否有从自定义资源定义生成客户资源对象的工具?
- amazon-web-services - 如何在最小化成本的同时管理具有截止日期的 AWS EC2 作业?
- wpf - 有没有办法改变标题栏的显示方式,以便我仍然可以在 WPF 中使用最小化、最大化、关闭和拖动的功能?
- android - 在android中更新应用程序时如何继续运行服务?
- prometheus - Quarkus - 将千分尺指标推送到普罗米修斯
- php - Wordpress如何更改页面URL?