【问题标题】:How to use apply for vector with parameterized function?如何使用带参数化函数的向量申请?
【发布时间】:2014-04-08 01:35:00
【问题描述】:

我有以下功能

myfunc <- function(x,myparam) {
     x <- do_sth(x, myparam)
     plot(x)
}

然后要应用于这些数据:

files <- Sys.glob("myfile_no*.txt") # This is a vector

目前我执行以下操作:

for (i in 1:length(files)) {
    mf <- files[i]
    myfunc(mf,myparam=3);

}

如何将上面的 for 循环替换为 apply 或其其他变体?

我尝试了这个错误:

> apply(x,1, myfunc, myparam)
Error in apply(files, 1, myfunc, myparam = 3) : 
  dim(X) must have a positive length
Execution halted

【问题讨论】:

  • 您为什么要这样做?显而易见的答案就是lapply(files, myfunc, myparam=3),但这似乎并没有让这个过程更加清晰......当然,除非这真的是一个家庭作业问题。

标签: r function apply


【解决方案1】:

所以,显而易见的解决方案不是 apply,而是 lapply:

output_object <- lapply(files, myfunc, myparam = 3)

如果您想要一个稍微干净一点的环境,这还有一个好处是允许您使用“匿名”功能。

不过,我想知道的是,您为什么要这样做?是否试图摆脱 for 循环中感知到的缓慢?如果是这样,您不太可能看到很大的改进;人们抱怨“我的 for 循环很慢”通常是在抱怨“我正在尝试对非原始数据类型进行 for 循环”或“我正在尝试迭代添加到没有定义长度的对象的 for 循环”。情况并非如此。我能想到的唯一能提高你速度的就是停止定义 mf - 只需调用 myfunc(files[i], myparam = 3)。

【讨论】:

    猜你喜欢
    • 2018-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    相关资源
    最近更新 更多