学向勤中得,萤窗万卷书。这篇文章主要讲述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()替换循环)】我怎么能用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, "
")
}else{
cat("no word match found between im:", im, "and ig:", ig, "
")
}
}
}dataframe1
#Text reference
#1Ronald Fisher12
#2Karl Pearson12
#3William Gosset13
#4Harald Cramer15
#5 Andrey Kolmogorov15
推荐阅读
- 如何从Delphi Android应用程序启动视频通话()
- JSON Web Token教程(Laravel和AngularJS中的示例)
- 使用AngularJS和Play框架构建现代Web应用程序
- 使用Spring框架构建MVC应用程序(初学者教程)
- Gulp的JavaScript自动化简介
- 这些年来,世界仍然由C编程提供动力
- 使用Angular Material构建超现代的Web应用
- 用JavaScript编写可测试的代码(简要概述)
- ES6的新增功能( CoffeeScript转换的透视图)