【发布时间】:2016-05-06 09:48:59
【问题描述】:
这个问题是在这个问题Capitalize the first letter of both words in a two word string进行头脑风暴之后提出的
我想编写一个接受向量的函数,它将句子中的每个单词大写,并将单词的其余部分取消大写。只大写第一个字母更容易:
CapitalizeFirstWord <- function(vector) {
s <- sapply(sapply(vector, substring, 1, 1), toupper)
t <- sapply(sapply(vector, substring, 2), tolower)
binded <- cbind(s,t)
apply(binded, 1, paste, collapse= "")
}
所以CapitalizeFirstWord(c("heLlo", "ABC", "GooD daY")) 的结果是
heLlo ABC GooD daY
"Hello" "Abc" "Good day"
(在这个问题的帮助下写了它Paste multiple columns together)
但我不能让它工作,让句子中的每个单词都大写。
这是我失败的尝试:
CapitalizeEveryWord <- function(vector) {
vectorS <- sapply(vector, strsplit, " ")
s <- sapply(sapply(vectorS, substring, 1, 1), toupper)
t <- sapply(sapply(vectorS, substring, 2), tolower)
binded <- cbind(s,t)
apply(binded, 1, paste, collapse= "")
}
这样CapitalizeEveryWord(c("heLlo", "ABC", "GooD daY")) 的结果就是
heLlo ABC GooD daY
"Hello" "Abc" "c(\"G\", \"D\")c(\"ood\", \"ay\")"
我不知道如何更改 cbind() 或 paste() 函数的行为,以便正确重新排列。
我正在做这项工作,因为我有一个非常大的数据框,其中大部分字符串都是大写的。
脚本应该消耗尽可能少的时间(因为使用 for() 循环迭代,对于每一行并且只大写第一个字母,非常慢,而且我在与 parLapply() 并行工作时遇到问题)。这就是为什么我使用*apply() 系列函数来创建一个新的更快的函数。
【问题讨论】: