我正在try 建立一个数据框架,

  fun     args               uses_arg              
1 myfun   function (x, w=1)  function (x, arg)

WHERE列"FUN"包含所选环境中的所有函数,参数为函数参数.我希望将信息放在数据框中,以便进一步过滤.请考虑以下代码.

myfun <- function(x, w=1) return(x * w)
 lsf.str()
# myfun : function (x, w)               # info from lsf.str().
# uses_arg : function (x, arg) 

 lsf_text <- lsf.str()
 class(lsf_text)
#  [1] "ls_str"                         # class.
#
 print.default(lsf_text)                # print as is.
#  [1] "myfun"
#  attr(,"envir")
#  <environment: R_GlobalEnv>
#  attr(,"mode")
#  [1] "function"
#
# print class 
 print(lsf_text)
#  myfun : function (x, w)     # <<<<<<<<<<<
#  uses_arg : function (x, arg)# <<<<<<<<<<< 
#-------------------------------------------
  • 问题1:如何或在哪里可以找到分号后的函数调用, 即"函数(x,w)",优选地使用R基函数.
  • 问题2:在哪里可以找到实际使用的打印功能.该函数可以给出线索.

推荐答案

你可以做某事,比如

> fnm <- lsf.str()
> res <- list(fun=as.list(fnm[seq_along(fnm)]), 
+      args=lapply(fnm, \(x) names(formals(get(x, .GlobalEnv)))),
+      param=lapply(fnm, \(x) gsub(r'{.*(?<=\()(.*)(?=\)).*}', '\\1', 
+                                  deparse(args(get(x, .GlobalEnv)))[[1]],
+                                  perl=TRUE) |> strsplit(', '))) |>
+   list2DF()
> res
     fun    args    param
1 myfun1    x, w x, w = 1
2 myfun2 x, z, w  x, z, w

哪里

> str(res)
'data.frame':   2 obs. of  3 variables:
 $ fun  :List of 2
  ..$ : chr "myfun1"
  ..$ : chr "myfun2"
 $ args :List of 2
  ..$ : chr  "x" "w"
  ..$ : chr  "x" "z" "w"
 $ param:List of 2
  ..$ :List of 1
  .. ..$ : chr  "x" "w = 1"
  ..$ :List of 1
  .. ..$ : chr  "x" "z" "w"

请注意,这是一个utils:::print.ls_str.


Data:

myfun1 <- function(x, w=1) return(x * w)
myfun2 <- function(x, z, w) return(z*(x / w))

R相关问答推荐

使用gggplot 2在R中重新调整面板和y轴文本大小

检测(并替换)字符串中的数学符号

Highcharter多次钻取不起作用,使用不同方法

警告:lmdif:info = 0. nls. lm()函数的输入参数不正确

IMF IFS数据以R表示

传递ggplot2的变量作为函数参数—没有映射级别以正确填充美学

线性模型斜率在减少原始数据时提供NA

将二进制数据库转换为频率表

使用范围和单个数字将数字与字符串进行比较

如何指定我的函数应该查找哪个引用表?

计算数据帧中指定值之前的行数,仅基于每行之后的future 行,单位为r

查找所有站点的最小值

在数据帧列表上绘制GGPUP

调换行/列并将第一行(原始数据帧的第一列)提升为标题的Tidyr类似功能?

从R中发出的咕噜声中的BUG?

如何将一个方阵分解成没有循环的立方体

减少雨云面之间的间距并绘制所有统计数据点

为R中的16组参数生成10000个样本的有效方法是什么?

Ggplot2水平线和垂直线的图例图标不匹配

向数据添加标签