我可以使用 tidyverse 更快地使用 'if' 和 'else' 语句创建 for 循环吗
Can I use tidyverse to make a for loop with an 'if' and 'else' statement faster
我有一个使用 if else 语句进行数据挖掘的 for 循环。然而运行确实需要很长时间。我在某处读到 tidyverse(dplyr 或 purrr)有时可以比 运行ning 循环更快地替代,但我在 purrr 中找不到任何 'if' 'else' 函数。到目前为止,这是我的循环:
for (j in 1:length(my.query$data$value)){
if(my.query$data$station[j] %in% dataPRCP[,1]){
rowNum<-which(dataPRCP[,1]==my.query$data$station[j])
dataPRCP[rowNum,i+3]<-my.query$data$value[j]
} else {
dataPRCP<-rbind(dataPRCP,emptyrow)
rowNum<-length(dataPRCP[,1])
location <- ncdc_stations(stationid = my.query$data$station[j])
dataPRCP[rowNum,1]<-my.query$data$station[j]
dataPRCP[rowNum,2]<-location$data$latitude
dataPRCP[rowNum,3]<-location$data$longitude
dataPRCP[rowNum,i+3]<-my.query$data$value[j]
}
}
您需要一个最小的工作示例才能获得直接帮助(我不知道您的数据是什么样的,也不知道您是如何尝试操作它的)。但是,purrr
中的一般策略是对列表中的每个元素应用一个函数。将您的 if/else 语句放入函数中(具有合适的输入),然后 map
将该函数应用于每个元素:
# trivial example
library(purrr)
result <- map(1:5, print)
或(if/else)
f <- function(x) {
if(x > 2) data_frame(a = 4, b = 10)
else data_frame(a = 0, b = 3)
}
map_df(1:5, f) # result is a data_frame
如果您输出的是数据框中的新元素,您可能会发现检查 ifelse
更有用,它是矢量化的或 tidyverse
版本 if_else
这对数据类型更挑剔。
# trivial example
# library(dplyr)
data_frame(a = 1:4) %>%
mutate(b = if_else(a > 2, 1, 10)
我有一个使用 if else 语句进行数据挖掘的 for 循环。然而运行确实需要很长时间。我在某处读到 tidyverse(dplyr 或 purrr)有时可以比 运行ning 循环更快地替代,但我在 purrr 中找不到任何 'if' 'else' 函数。到目前为止,这是我的循环:
for (j in 1:length(my.query$data$value)){
if(my.query$data$station[j] %in% dataPRCP[,1]){
rowNum<-which(dataPRCP[,1]==my.query$data$station[j])
dataPRCP[rowNum,i+3]<-my.query$data$value[j]
} else {
dataPRCP<-rbind(dataPRCP,emptyrow)
rowNum<-length(dataPRCP[,1])
location <- ncdc_stations(stationid = my.query$data$station[j])
dataPRCP[rowNum,1]<-my.query$data$station[j]
dataPRCP[rowNum,2]<-location$data$latitude
dataPRCP[rowNum,3]<-location$data$longitude
dataPRCP[rowNum,i+3]<-my.query$data$value[j]
}
}
您需要一个最小的工作示例才能获得直接帮助(我不知道您的数据是什么样的,也不知道您是如何尝试操作它的)。但是,purrr
中的一般策略是对列表中的每个元素应用一个函数。将您的 if/else 语句放入函数中(具有合适的输入),然后 map
将该函数应用于每个元素:
# trivial example
library(purrr)
result <- map(1:5, print)
或(if/else)
f <- function(x) {
if(x > 2) data_frame(a = 4, b = 10)
else data_frame(a = 0, b = 3)
}
map_df(1:5, f) # result is a data_frame
如果您输出的是数据框中的新元素,您可能会发现检查 ifelse
更有用,它是矢量化的或 tidyverse
版本 if_else
这对数据类型更挑剔。
# trivial example
# library(dplyr)
data_frame(a = 1:4) %>%
mutate(b = if_else(a > 2, 1, 10)