r - R:试图理解逻辑以便用 lapply() 替换循环
问题描述
我是 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() 逻辑。
解决方案
我试图用*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
推荐阅读
- firebase - 是否可以根据请求的 ServiceAccountKey.json 文件中的信息在 Firestore 安全规则中设置条件?
- python - 如何在 keras 中使用 LSTMCell 和 RNN 手动展开 LSTM 层?
- typescript - (TypeScript)从函数参数类型创建类型
- python - Python列表切片和索引,更好的方法
- sparql - 如何在 SPARQL 中获取 DBpedia 中两个节点之间的路径详细信息
- swift - 我可以使用 ARKit 一次跟踪 4 张以上的图像吗?
- javascript - 使用 setTimeout 的闭包示例无法识别函数调用
- python - 我可以从它的值中获取 python 字典的索引吗?
- c# - Revit API - 网格和级别 - GetDatumExtentTypeInView - 网格问题
- reactjs - 如何在创建反应应用程序中进行应用程序版本控制?