使用 R 编程函数命令为我的解决方案添加标签

Labels for my solutions with R programming function command

刚刚学习 R 编程,我正在尝试找到一种方法来包含对我从函数中获得的解决方案的描述。例如,如果我求解面积,我希望函数显示 "Area = 2",而不仅仅是“2”。我已经尝试过 print/paste 命令,但在我的一生中,我尝试过的所有不同变体都无法与 function 命令一起使用。也许我遗漏了一些简单的东西?

    TrapGeo<-function(b,m,y){ 
A=((b+m*y)/y)
#Flow Area
P=(b+2*y*(sqrt(1+(m^2))))
#Wetted Perimeter
R=A/P
#Hydraulic Radius
B=b+2*m*y
#Top Water Width
D=A/B
#Hydraulic Depth
output=c(A, P, R, B, D)
return(output) 
print(paste("Flow Area =", A)) 
print(paste("Wetted Perimeter =", P)) 
print(paste("Hydraulic Radius =", R)) 
print(paste("Top Water Width =", B)) 
print(paste("Hydraulic Depth =", D)) 
}

截至目前,函数 returns 仅按我的要求输出,但我想为解决方案添加一个标签,这正是我尝试对打印(粘贴()) 部分在底部。

在这种情况下使用 return() 有点像清除对象。所以在使用 return 之后打印 "A" 不会按预期进行。相反,如果您想在打印其他语句之前打印 "output",请使用 print(output);然后让最后一行成为 return(),同时在该函数内部使用 invisible(output),这样 "output" 就不会打印两次。

试试这个:

TrapGeo<-function(b,m,y){ 
  A=((b+m*y)/y)
  #Flow Area
  P=(b+2*y*(sqrt(1+(m^2))))
  #Wetted Perimeter
  R=A/P
  #Hydraulic Radius
  B=b+2*m*y
  #Top Water Width
  D=A/B
  #Hydraulic Depth
  output=c(A, P, R, B, D)
  print(output)
  print(paste("Flow Area =", A)) 
  print(paste("Wetted Perimeter =", P)) 
  print(paste("Hydraulic Radius =", R)) 
  print(paste("Top Water Width =", B)) 
  print(paste("Hydraulic Depth =", D))
  return(invisible(output))
}

TrapGeo(1,2,3)

输出:

[1]  2.3333333 14.4164079  0.1618526 13.0000000  0.1794872
[1] "Flow Area = 2.33333333333333"
[1] "Wetted Perimeter = 14.4164078649987"
[1] "Hydraulic Radius = 0.161852616489741"
[1] "Top Water Width = 13"
[1] "Hydraulic Depth = 0.179487179487179"

为了访问函数中计算的数据,包括格式化输出,我将执行以下操作:

TrapGeo <- function( b, m, y)
{ 
    # Flow Area:
    A = ( ( b + m * y ) / y )
    # Wetted Perimeter:
    P = ( b + 2 * y * ( sqrt( 1 + ( m^2 ) ) ) )
    # Hydraulic Radius:
    R = A / P
    # Top Water Width:
    B = b + 2 * m * y
    # Hydraulic Depth:
    D = A / B

    # ready to print 
    output <- paste("Flow Area = ", A, "\n",
        "Wetted Perimeter = ", P, "\n",
        "Hydraulic Radius = ", R, "\n",
        "Top Water Width = ", B,  "\n",
        "Hydraulic Depth = ", D, "\n", sep = "" )

    # return both numbers and the formatted output
    return( list( c( A, P, R, B, D ), output ) )
}

现在您可以使用函数为任何变量赋值,同时确保屏幕上不会打印任何内容:

x <- TrapGeo( 1, 2, 3 )

现在或以后的任何阶段,您可以使用列表表示法和 cat() 命令在屏幕上显示格式化数据(或将其保存到文件中):

cat( x[[2]] )
Flow Area = 2.33333333333333
Wetted Perimeter = 14.4164078649987
Hydraulic Radius = 0.161852616489741
Top Water Width = 13
Hydraulic Depth = 0.179487179487179

同时,您可以访问数字形式的数据以供进一步使用:

x[[1]][3]
[1] 0.1618526