嵌套for循环到函数和lappy
我试图为嵌套for循环编写函数和调用代码。下面的代码,我可以很容易地把它与for循环和我的函数运行。但我试图在函数中避免for循环,而选择lappy。如何使用lappy创建函数及其相应的调用代码 带有for循环的代码:嵌套for循环到函数和lappy,r,R,我试图为嵌套for循环编写函数和调用代码。下面的代码,我可以很容易地把它与for循环和我的函数运行。但我试图在函数中避免for循环,而选择lappy。如何使用lappy创建函数及其相应的调用代码 带有for循环的代码: df <- data.frame(actual=c("reaok_oc giade_len","reaok_oc giade_len reaok_oc giade_len"), Predicted = c("giade_len","rea
df <- data.frame(actual=c("reaok_oc giade_len","reaok_oc giade_len reaok_oc giade_len"),
Predicted = c("giade_len","reaok_oc giade_len reaok_oc giade_len"))
df[] <- lapply(df, as.character)
str(df)
all_acc<-NULL
for(s in 1:nrow(df)){
sub_df1<-df[s,]
actual_words<-unlist(strsplit(sub_df1$actual," "))
all_count<-0
for(g in 1:length(actual_words)){
count_len<-ifelse(grep(actual_words[g],sub_df1$Predicted),1,0)
all_count<-sum(all_count,count_len)
}
sub_acc<-all_count/length(actual_words)
all_acc<-c(all_acc,sub_acc)
}
df$trans_acc<-all_acc
sensitivity=sum(df$trans_acc)/nrow(df)
sensitivity
df也许,我们可以使用分隔行
library(dplyr)
library(tidyr)
library(stringr)
df %>%
separate_rows(actual, sep="_") %>%
summarise(perc = mean(str_detect(Predicted, actual)))
# perc
#1 0.75
它可以包装成一个函数
f1 <- function(data, act, pred) {
data %>%
separate_rows({{act}}, sep="_") %>%
summarise(perc = mean(str_detect({{pred}}, {{act}})))
}
f1(df, actual, Predicted)
# perc
#1 0.75
actual_in_predicted <- function(actual, predicted) {
sum(actual %in% predicted)
}
f1%
单独的_行({act},sep=“”)%>%
总结(perc=平均值(str_detect({{pred}},{{{act})))
}
f1(df、实际值、预测值)
#perc
#1 0.75
在基本R中,通常最好找到“矢量化”(仅一个R函数调用)而不是“迭代”(每个元素一个调用)的解决方案。比如说
for(s in 1:nrow(df)){
sub_df1<-df[s,]
actual_words<-unlist(strsplit(sub_df1$actual," "))
...
只涉及一个,但执行相同的转换
我也认为当你说
for(g in 1:length(actual_words)){
count_len<-ifelse(grep(actual_words[g],sub_df1$Predicted),1,0)
all_count<-sum(all_count,count_len)
}
“for”循环可能会迭代实际和预测的每个元素
all_count <- integer()
for (i in 1:nrow(df))
all_count[[i]] <- actual_in_predicted(actual[[i]], predicted[[i]])
变量all_acc
是这个数字向量除以每次比较中的实际单词数
all_acc <- all_count / lengths(actual)
我想做的所有动作都是功能性的。你能帮忙吗
actual_in_predicted <- function(actual, predicted) {
sum(actual %in% predicted)
}
all_count <- integer()
for (i in 1:nrow(df))
all_count[[i]] <- actual_in_predicted(actual[[i]], predicted[[i]])
all_count <- mapply(actual_in_predicted, actual, predicted)
all_acc <- all_count / lengths(actual)
actual_in_predicted <- function(actual, predicted) {
sum(actual %in% predicted)
}
actual <- strsplit(df$actual, " ")
predicted <- strsplit(df$Predicted, " ")
all_count <- mapply(actual_in_predicted, actual, predicted)
all_acc <- all_count / lengths(actual)
df$trans_acc <- all_acc
sensitivity <- sum(df$trans_acc) / nrow(df)