小编Dom*_*ski的帖子

在R中的函数中创建和使用新变量:tidyverse中的NSE编程错误

在阅读并重新阅读了许多"使用dplyr编程"指南之后,我仍然无法找到解决我的特定情况的方法.

据我所知,使用group_by_,mutate_和tidyverse功能,例如"字符串型"版本向弃用的标题,这enquo是要走的路.

然而,我的情况有所不同,我正在努力寻找一种整洁的方式来解决它的整洁方式.

实际上,我的目标是在函数内创建和操作数据帧.基于其他人创建(变异)新变量,使用它们等.

但是,无论我怎么努力,我的代码都会出错或者在包检查时返回一些警告,例如no visible binding for global variable ....

这是一个可重复的例子:

这就是我想要做的事情:

df <- data.frame(X=c("A", "B", "C", "D", "E"),
                 Y=c(1, 2, 3, 1, 1))
new_df <- df %>%
  group_by(Y) %>%
  summarise(N=n()) %>%
  mutate(Y=factor(Y, levels=1:5)) %>%
  complete(Y, fill=list(N = 0)) %>%
  arrange(Y) %>%
  rename(newY=Y) %>%
  mutate(Y=as.integer(newY))
Run Code Online (Sandbox Code Playgroud)

一些常见的dplyr操作预期结果应该是:

# A tibble: 5 x 3
     newY     N     Y
<fctr> <dbl> <int>
1      1     3     1
2      2     1     2
3      3     1 …
Run Code Online (Sandbox Code Playgroud)

r dplyr nse tidyverse mutate

6
推荐指数
1
解决办法
840
查看次数

Python-从函数内部删除(从内存中删除)变量?

我必须加载A需要传递给函数的这个庞大的对象(可以加权10ms的权重),该函数从中提取参数B以进一步对其施加大量计算。

A = load(file)

def function(A):    
   B = transorm(A)    
   B = compute(B)
   return(B)
Run Code Online (Sandbox Code Playgroud)

为了释放一些内存(因为我已经遇到了MemoryError),我想在将A其转换为B后立即从内存中删除。我尝试过,del但它似乎并不影响A脚本级别的存在。我也尝试过,del global()["A"]但是它说A没有定义为全局变量。

有办法吗?谢谢!

python memory optimization global-variables del

5
推荐指数
1
解决办法
1万
查看次数

后验地更改 ggplot geom 的颜色(在指定了另一种颜色之后)

包中的函数返回一个带有我想更改的预设颜色的 ggplot。

例如,让我们模拟该图:

library(ggplot2)
df <- data.frame(x = rnorm(1000))

p <- ggplot(df, aes(x=x)) +
  geom_density(fill="#2196F3")
p
Run Code Online (Sandbox Code Playgroud)

这是一个蓝色填充的密度图。

我想后验地改变它的颜色。

我试过这样做:

p + scale_fill_manual(values=c("#4CAF50"))
p
Run Code Online (Sandbox Code Playgroud)

但它不会改变任何东西。

我也试过:

p <- p + geom_density(fill="black")
p
Run Code Online (Sandbox Code Playgroud)

但这在前一层之上添加了一层,而不会改变它。

我也试图深入研究 ggplot 对象,但我在那里迷路了。

有没有什么方便的方法可以改变后验几何的属性?

谢谢

plot r ggplot2

5
推荐指数
1
解决办法
1044
查看次数

朱莉娅:多种类型的相同功能?

我有一个在向量上定义的大函数,但我希望它也可以使用单个值。我希望第一个参数的类型是向量或数字。

我尝试以下方法:

function bigfunction(x::Vector, y::Float64=0.5)

  # lots of stuff
  z = x .+ y
  return z
end


bigfunction(x::Number) = bigfunction()
Run Code Online (Sandbox Code Playgroud)

该函数适用于向量,但不适用于数字。

bigfunction([0, 1, 3])
bigfunction(2)
Run Code Online (Sandbox Code Playgroud)

Union{}我应该像有时看到的那样做一些事情吗?或者以不同的方式重新定义方法?

methods function dispatch julia

5
推荐指数
1
解决办法
2199
查看次数

ggplot:在正常曲线下填充小区域:删除"加入"区域

我想在曲线下填充一个小区域.然而,带状宝石连接分布的两个"部分".

library(tidyverse)
density(rnorm(1000, 0, 1)) %$%
  data.frame(x=x, y=y) %>%
  mutate(area = dplyr::between(x, 1.5, 2.6)) %>%
  ggplot() +
  geom_ribbon(aes(x = x, ymin = 0, ymax = y, fill = area))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我相信避免这种行为的方法之一是将分布分成三个不同的部分,并用相同的颜色填充它们中的两个.但是,我正在寻找一种更加整洁和优雅的方式.

r area fill ggplot2

4
推荐指数
1
解决办法
74
查看次数

Julia:如何将向量的字符连接在一起 (["a", "b", "c"] -&gt; "abc")

如何将向量中的字符或字符串连接到一个字符串中,以便 ["a", "b", "c"] 变为 "abc"?

我已经尝试过使用 vcat、hcat,但似乎没有任何效果...谢谢

回答

join(["a", "b", "c"])

string concatenation character julia

4
推荐指数
1
解决办法
3132
查看次数

mgcv GAM:“by”参数中存在多个变量(平滑变化超过 1 个因子)

我需要在多个因素上建立一个平滑项的模型。该by论证允许我对每个因子水平进行平滑建模,但我找不到如何在多个因子上做到这一点。

我尝试了类似于以下的解决方案,但没有成功:

data <- iris
data$factor2 <- rep(c("A", "B"), 75)

mgcv::gam(Sepal.Length ~ s(Petal.Length, by = c(Species, factor2)), data = data)
#> Error in model.frame.default(formula = Sepal.Length ~ 1 + Petal.Length + : variable lengths differ (found for 'c(Species, factor2)')
Run Code Online (Sandbox Code Playgroud)

reprex 包(v2.0.0)创建于 2021-08-05

欢迎任何帮助!

r smoothing gam mgcv brms

4
推荐指数
1
解决办法
2600
查看次数

tidyverse:汇总时计算特定级别的数量

我想在分组后汇总时,计算另一个因素的特定级别的数量。

在下面的工作示例中,我想计算"male"每个组中的级别数。我已经尝试了很多计数、计数等方法,但找不到一种简单明了的方法来做到这一点。

df <- data.frame(Group=replicate(20, sample(c("A","B"), 1)),
                 Value=rnorm(20),
                 Factor=replicate(20, sample(c("male","female"), 1)))
df %>% 
  group_by(Group) %>% 
  summarize(Value = mean(Value),
            n_male = ???)
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助!

group-by r dplyr summarize tidyverse

3
推荐指数
1
解决办法
3019
查看次数

如何使用rstanarm以APA风格报告贝叶斯线性(混合)模型?

我目前正在努力解决如何按照APA-6建议报告的结果rstanarm::stan_lmer().

首先,我将在频率论方法中使用混合模型,然后尝试使用贝叶斯框架进行相同的操作.

以下是获取数据的可重现代码:

library(tidyverse)
library(neuropsychology)
library(rstanarm)
library(lmerTest)

df <- neuropsychology::personality %>% 
  select(Study_Level, Sex, Negative_Affect) %>% 
  mutate(Study_Level=as.factor(Study_Level),
         Negative_Affect=scale(Negative_Affect)) # I understood that scaling variables is important
Run Code Online (Sandbox Code Playgroud)

现在,让我们以"传统"的方式拟合线性混合模型来测试性别(男/女)对负面情绪(负面情绪)的影响,以及研究水平(教育年限)作为随机因素.

fit <- lmer(Negative_Affect ~ Sex + (1|Study_Level), df)
summary(fit)
Run Code Online (Sandbox Code Playgroud)

输出如下:

Linear mixed model fit by REML t-tests use Satterthwaite approximations to degrees of
  freedom [lmerMod]
Formula: Negative_Affect ~ Sex + (1 | Study_Level)
   Data: df

REML criterion at convergence: 3709

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-2.58199 -0.72973  0.02254  0.68668  2.92841 …
Run Code Online (Sandbox Code Playgroud)

r bayesian mixed-models stan rstan

3
推荐指数
1
解决办法
735
查看次数

朱莉娅:检查一个向量是否是数字向量

我想检查我的矢量/数组是否由数字组成.

我试过了:

if isa(x, Array{Number})
  println("yes")
end
Run Code Online (Sandbox Code Playgroud)

但它似乎不起作用......

types if-statement julia

3
推荐指数
1
解决办法
142
查看次数