我有 2 个完全相同的脚本。
但是一个脚本生成了 3 个权重为 82.7 KB 的 RData 文件,另一个脚本创建了 3 个权重为 120 KB 的 RData 文件。
第一个没有并行:
library("plyr")
ddply(.data = iris,
.variables = "Species",
##.parallel=TRUE,##Without parallel
.fun = function(SpeciesData){
#Create Simple Model -------------------------------------------------------------
Model <- lm(formula = "Sepal.Length~Sepal.Width+Petal.Length+Petal.Width",data = SpeciesData)
#Save The Model -------------------------------------------------------------
save(Model,
compress = FALSE,
file = gsub(x = "Species.RData",
pattern = "Species",
replacement = unique(SpeciesData$Species)))
})
Run Code Online (Sandbox Code Playgroud)
第二个是并行:
library("plyr")
doSNOW::registerDoSNOW(cl<-snow::makeCluster(3))
ddply(.data = iris,
.variables = "Species",
.parallel=TRUE,##With parallel
.fun = function(SpeciesData){
#Create Simple Model ------------------------------------------------------------- …Run Code Online (Sandbox Code Playgroud) 我有两个表,每个表都包含几个时期的开始和结束日期。我想要一种有效的方法来查找日期在第一个表的范围内但不在第二个表的范围内的期间(日期范围)。
例如,如果这是我的第一张桌子(有我想要的日期)
start_date end_date
2001-01-01 2010-01-01
2012-01-01 2015-01-01
Run Code Online (Sandbox Code Playgroud)
这是我的第二张桌子(我不想要的日期)
start_date end_date
2002-01-01 2006-01-01
2003-01-01 2004-01-01
2005-01-01 2009-01-01
2014-01-01 2018-01-01
Run Code Online (Sandbox Code Playgroud)
然后输出看起来像
start_date end_date
2001-01-01 2001-12-31
2009-01-02 2010-01-01
2012-01-01 2013-12-31
Run Code Online (Sandbox Code Playgroud)
我们可以安全地假设第一个表中的期间不重叠,但不能假设第二个表中的期间重叠。
我已经有一种方法可以做到这一点,但它比我能接受的要慢一个数量级。所以希望有人可以提出一个更快的方法。
我目前的方法看起来像:
如果可以将其中一些步骤合并在一起,我相信会有更快的方法。
更详细
start_date end_date
2001-01-01 2010-01-01
2012-01-01 2015-01-01
Run Code Online (Sandbox Code Playgroud) 我有两个组成部分:
父组件是类组件,子组件是功能组件。从父组件调用子方法的最佳实践是什么?
这些组件的目标是能够动态加载 svg 文件。
父组件:
class UnitMonitor extends PureComponent {
constructor() {
super();
}
state = {
img: null,
};
onChangeShcema = schemaID => {
axios.get("/api/schemata/get-schemata-nodes/" + schemaID).then(response => {
let path = response.data["0"]["file"];
// call loadFile function of child component is needed
});
render() {
return (
<Row type="flex" className="">
<Col span={25}>
<SvgViewer />
</Col>
</Row>
);
}
};
Run Code Online (Sandbox Code Playgroud)
子组件:
const SvgViewer = () => {
const loadFile = path => {
let svgFile = require("./images/" …Run Code Online (Sandbox Code Playgroud) 我正在使用 dbplyr 在 SQL Server 中编写和运行查询,并希望应用条件突变。这可以通过使用ifelse或使用来完成case_when。查询在使用时有效,ifelse但在使用时抛出和异常case_when。
问题似乎是这两个命令被翻译成的 SQL 语法。该case_when语法不似乎是有效的SQL。你能告诉我为什么以及如何解决它吗?或者这是一个错误?
# libraries
library(DBI)
library(dplyr)
library(dbplyr)
# establish connection to database table
connection_string = "database.specific.string"
# mine looks something like "DRIVER=...; Trusted_Connection=...; DATABASE=...' SERVER=..."
db_connection = dbConnect(odbc::odbc(), .connection_string = connection_string)
my_table = tbl(db_connection, from = my_table_name)
# attempted query
tmp = my_table %>%
mutate(new_col = case_when(col1 == col2 ~ "a",
col1 != col2 ~ "b"))
# check SQL code for query
show_query(tmp) …Run Code Online (Sandbox Code Playgroud) 想要使用 dplyr 并将case_when一系列指标列折叠为一列。挑战是我希望能够在未指定/动态数量的列上折叠。
考虑以下数据集,gear已拆分为一系列指标列。
library(dplyr)
data(mtcars)
mtcars = mtcars %>%
mutate(g2 = ifelse(gear == 2, 1, 0),
g3 = ifelse(gear == 3, 1, 0),
g4 = ifelse(gear == 4, 1, 0)) %>%
select(g2, g3, g4)
Run Code Online (Sandbox Code Playgroud)
我正在尝试编写一个相反的函数。
当我知道有多少种情况时,可以按如下方式完成:
combine_indices = function(db, cols, vals){
db %>% mutate(new_col = case_when(!!sym(cols[1]) == 1 ~ vals[1],
!!sym(cols[2]) == 1 ~ vals[2],
!!sym(cols[3]) == 1 ~ vals[3]))
}
cols = c("g2", "g3", "g4")
vals = c(2,3,4)
combine_indices(mtcars, cols, vals)
Run Code Online (Sandbox Code Playgroud)
但是,我希望该combine_indices函数可以处理任意数量的索引列(现在它正好适用于三个)。 …