为什么许多(大多数?)R函数在一个向量上循环但有些不是?

时间:2016-01-09 23:48:53

标签: r vectorization lapply sapply

R中的许多函数将vector作为参数,为参数向量的每个元素计算函数,然后返回包含结果的向量。例如,如果我创建以下函数

myFunction <- function(x) {
  x <- (x+1)/2
  print(x)
}

然后评估myFunction(1:5),我得到一个向量结果:1.0 1.5 2.0 2.5 3.0.不需要循环。

然而,前几天,我使用dir.create()函数来制作一堆目录。 dir.create()函数将您要创建的文件夹的路径作为参数。由于我想创建许多文件夹,我尝试使用一个字符向量,每个元素都是我想要创建的文件夹的路径:

dir.create(c("folder 1 path", "folder 2 path", "folder 3 path"))

在执行此操作时,我收到一条错误消息,指出“无效的'路径'参数。”果然,如果查看dir.create()的文档,它指定path参数必须是“包含单个路径名的字符向量”。 使dir.create()接受路径名向量的唯一方法似乎是编写循环或应用函数:

sapply(c("folder 1 path", "folder 2 path", "folder 3 path"), dir.create)

虽然我不记得具体的例子,但我想我已经遇到过这样的其他功能。似乎不一致的是,某些函数会自动循环输入的向量,而其他函数的行为类似于dir.create()函数。编写循环很容易,但我真的很想理解为什么我希望某些函数在向量的长度上运行,但它们却没有。

有没有办法提前告诉函数是否乐意将向量作为输入,或者它是否只接受单个值?

0 个答案:

没有答案