我正在尝试编写一个以字符串作为参数的函数,并在Pig Latin中打印字符串。 (在PigLatin中,你将单词的第一个字母移到最后,然后添加" ay"。例如,"这很有趣" - >" histay asway unfay& #34;。)我刚开始在R,所以我设法做的就是
function(x){
x<-c() str_sub(x, 2, -1)
....
}
但我真的不知道如何将第一个字母移到单词的末尾并添加一个。任何提示将不胜感激!
答案 0 :(得分:2)
使用基本R函数的一种方法可以是使用strsplit
和paste
的组合。我们可以创建一个对单个单词起作用的函数
f_one = function(word){
letters = strsplit(word,"")[[1]]
paste(c(letters[-1],letters[1],"ay"),collapse = "")
}
f_one("this")
## [1] "histay"
将其拆分为单个字母,然后使用粘贴将第一个字母粘贴到最后,然后添加&#34; ay&#34;。
然后我们可以使用第二个函数作用于多个单词的字符串,将字符串拆分为单个单词,将函数应用于每个单词并将结果粘贴在一起
f_multiple= function(words){
individual = strsplit(words," ")[[1]]
paste(sapply(individual,f_one), collapse = " ")
}
f_multiple("this was fun")
## [1] "histay asway unfay"
使用与第一个函数相同的逻辑,但在空格上分割以给出单独的单词。
答案 1 :(得分:2)
使用正则表达式:
pl = function(x) {
x = unlist(strsplit(x, split=" "))
paste(gsub("(.)(.*)", "\\2\\1ay", x), collapse=" ")
}
pl = Vectorize(pl)
a = c("this was fun", "What is this in pig Latin")
pl(a)
this was fun What is this in pig Latin "histay asway unfay" "hatWay siay histay niay igpay atinLay"
答案 2 :(得分:0)
执行此操作的一种方法是使用paste0
加入三个字符串:
#The first character of string x
substr(x,1,1)
#All characters of x except the first
substr(x,2,nchar(a))
# And the string "ay"
pig_latin_x = paste0(substr(x,2,nchar(a)), substr(x,1,1), "ay")
这适用于单个单词,而不是短语。对于一个短语,首先将它们与strsplit分开。 jamieRowen的答案向您展示了如何实现这一目标。