【发布时间】:2018-03-04 19:01:28
【问题描述】:
我正在尝试寻找一种更 R 的方式来应用我的函数,该函数将两个字符串一起与命名列表中的命名列表元素进行比较。寻找一种没有 for 循环的方法,所以我看了一下lapply;任何建议,我将不胜感激!
这是一个可重现的例子:
my_list <- list(coca = c(13, 422, 131, 2), cola = c(11, 53, 3))
names(my_list$coca) <- c("sprite", "coke", "pepsi", "cocacoca")
names(my_list$cola) <- c("lemonade", "juice", "colacola")
compare_substr <- function(word1, word2, min_char){
# INPUT: word1, word2, and min_char (optional)
# OUTPUT: TRUE or FALSE
if(class(word1) != "character" || class(word2) != "character"){
stop("Error: Words being compared are not in character format")
}
if(missing(min_char)){
min_char <- nchar(word1)
}
if(substring(word1, 1, min_char) == substring(word2, 1, min_char)){
return(TRUE)
}
else{
return(FALSE)
}
}
最终结果应该是这样的,所以我可以过滤出TRUE
$coca
sprite coke pepsi cocacoca
FALSE FALSE FALSE TRUE
$cola
lemonade juice colacola
FALSE FALSE TRUE
我目前的方法是通过 for 循环,但我知道使用 lapply 有一种更简洁的方法,但我开始认为我的 compare_substr 函数必须更改才能这样做。 ..有没有办法在不改变功能的情况下做到这一点?
【问题讨论】:
-
预期输出是什么?请添加。
-
@ManishSaraswat 感谢您的建议。我已经添加了预期的输出!