Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
何时使用sapply和何时使用R';内部矢量化?_R_Vectorization - Fatal编程技术网

何时使用sapply和何时使用R';内部矢量化?

何时使用sapply和何时使用R';内部矢量化?,r,vectorization,R,Vectorization,考虑以下代码: strings<-c("string_x", "strxng_y", "xstring_z") replace_letters <- function(string){ gsub("x", "a", string) } replace_letters(strings) 而且: sapply(strings, replace_letters) 返回: [1] "string_a" "strang_y" "astring_z" string_x

考虑以下代码:

strings<-c("string_x", "strxng_y", "xstring_z")
replace_letters <- function(string){
    gsub("x", "a", string)
}
replace_letters(strings)
而且:

sapply(strings, replace_letters)
返回:

[1] "string_a"  "strang_y"  "astring_z"
   string_x    strxng_y   xstring_z 
  "string_a"  "strang_y" "astring_z"  

这意味着不需要
sapply
和相关函数,因为R具有内部矢量化。然而,情况似乎并非如此。什么时候以及为什么R的内部矢量化不足,并且需要
sapply
和相关函数?

gsub
恰好在其第一个参数上进行了矢量化(
strings
,在您的示例中),因此在这种情况下
sapply
是不必要的。当然,
sapply
有很多合法的用途,其中之一是当您需要将非矢量化函数应用于向量时。此外,如果您想将函数应用于数据帧的多个列,或者如果您想将函数应用于列表的每个元素,例如,
gsub
pattern
参数没有矢量化,因此如果要替换为不断变化的模式,则必须以某种方式进行循环。当所讨论的函数尚未矢量化时,它们是必需的。在这种情况下,我会选择
vapply()
而不是
sapply()
因为您知道结果总是一个长度为一个字符的向量