我是R的初学者,我想更熟悉apply()函数,因为在我所知的情况下,R中的循环一般都是避免的。
有一些双循环或三循环(循环中循环内的循环),我很难用lapply()函数“替换”它们。
所以,例如我有以下代码:
im <- 1
ig <- 1
for(im in 1:nrow(dataframe1)){
for(ig in 1:nrow(dataframe2)){
if(grepl(dataframe2$name[ig], dataframe1$Text[im])){
dataframe1$reference[im] <- dataframe1$reference[im] + 1
cat("match found between:", im, "and ig:", ig)
ig <- ig + 1
}else{
cat("no word match found between im:", im, "and ig:", ig)
ig <- ig + 1
}}
im <- im + 1
ig <- 1
}
如何用R中的lapply()(或apply()或sapply())函数替换这两个循环? 希望在那之后进入apply()逻辑。
答案 0 :(得分:0)
我尝试使用*apply
函数重写您的循环(已更正),我相信在这种情况下,您最好使用旧的for
循环。
使用已编制的数据集,这是您的代码,但是正确。
dataframe1 <- data.frame(Text = c("Ronald Fisher", "Karl Pearson", "William Gosset",
"Harald Cramer", "Andrey Kolmogorov"),
reference = 11:15, stringsAsFactors = FALSE)
dataframe2 <- data.frame(name = c("Ronald", "Harald"), stringsAsFactors = FALSE)
for(im in 1:nrow(dataframe1)){
for(ig in 1:nrow(dataframe2)){
if(grepl(dataframe2$name[ig], dataframe1$Text[im])){
dataframe1$reference[im] <- dataframe1$reference[im] + 1
cat("match found between:", im, "and ig:", ig, "\n")
}else{
cat("no word match found between im:", im, "and ig:", ig, "\n")
}
}
}
dataframe1
# Text reference
#1 Ronald Fisher 12
#2 Karl Pearson 12
#3 William Gosset 13
#4 Harald Cramer 15
#5 Andrey Kolmogorov 15