【问题标题】:R Apply user-defined function to selected columns of a dataframeR将用户定义的函数应用于数据框的选定列
【发布时间】:2021-09-14 08:21:20
【问题描述】:

我正在尝试将用户定义的函数(来自 MASS 包的 fitdistr)应用于数据帧的选定列,但我不断收到错误消息“'x' must be a non-empty numeric vector”。我希望使用 lapply() 函数或遍历选定的列。我该如何进行? 这是定义的函数:

SSD <- function(x,p){
      #fitting model through MSC10 
      SSD.params <- fitdistr(x,"log-normal")
      HC20 <- qlnorm(p, meanlog = SSD.params$estimate[1], sdlog = SSD.params$estimate[2])
      return(HC20)
    }

我的数据框看起来像这样

   A       B      C     D     
1  AB     1.5    3.1   8.7
2  CD     0.15   10.7 16.2
3  EF     3.6    5.4   4.7
4  GH     2.8    6.1   1.8

我有 1003 列,我想将该函数应用于第 4:1003 列(所有行)并将输出保存在具有 1 行和 1003 列的数据框中(上述 qlnorm 函数的结果)。 关于如何最好地做到这一点的任何想法?

谢谢!

【问题讨论】:

  • 您能否添加您现在使用的代码来启动SSDlapply
  • 'num_col2
  • 您的代码中缺少p 的值。应该是:boot.HC20 &lt;- as.data.frame(lapply(boot.MSC10[, num_col2], SSD, p = &lt;some number!&gt;))
  • 好的,非常感谢!

标签: r function loops lapply


【解决方案1】:
as.data.frame(t(unlist(lapply(df[,4:1003], SSD, p=p)))

【讨论】:

  • 或者干脆as.data.frame(lapply(df[4:1003], SSD, p = p))
  • 谢谢!这相当于最终对我有用的东西(上面的评论),但是我在哪里定义 p?在“p=p”中?
  • 而不是p = p写你需要的数字,比如p = 0.5
猜你喜欢
  • 1970-01-01
  • 2018-11-10
  • 2020-10-01
  • 2021-09-06
  • 1970-01-01
  • 2020-10-28
  • 2020-11-11
  • 2023-03-02
  • 2018-01-04
相关资源
最近更新 更多