同样,我对我的datacamp R教程感到困惑。视频演示试图解释vapply和sapply之间的区别,并提供以下代码和输出:
first_and_last <-function(name) {
name <- gsub(" ", "", name)
letters <- strsplit(name, split = "")[[1]]
return(c(first = min(letters), last = max(letters))))
}
sapply(cities, first_and_last)
New York Paris London Tokyo Rio de Janeiro Cape Town
first "e" "a" "d" "k" "a" "a"
last "y" "s" "o" "y" "R" "w"
vapply(cities, first_and_last, character(2))
New York Paris London Tokyo Rio de Janeiro Cape Town
first "e" "a" "d" "k" "a" "a"
last "y" "s" "o" "y" "R" "w"
我们可以看到输出是相同的。有人告诉我这是因为vapply函数中字符向量的长度手动设置为2,如果将其设置为1,我们会遇到错误。
我不确定我是否理解这些字母,因此为什么我们需要一个长度为2的字符向量?
答案 0 :(得分:3)
当您在vapply
中指定返回形状(长度为2的字符向量)时,它需要与您要调用的函数的返回类型(first_and_last
)相匹配。
实际上,它们是单个字母还是很长的单词都没有关系,重要的是first_and_last
返回一个包含两个元素的字符向量。