小编Adr*_*ian的帖子

获得通过最大似然估计的系数到星形表中

Stargazer为lm(和其他)物体生产非常漂亮的乳胶桌.假设我按最大可能性拟合模型.我希望观星者为我的估计生成一个类似于lm的表格.我怎样才能做到这一点?

虽然它有点hacky,但有一种方法可能是创建一个包含我的估计值的"假"lm对象 - 我认为只要summary(my.fake.lm.object)有效,它就会起作用.那容易行吗?

一个例子:

library(stargazer)

N <- 200
df <- data.frame(x=runif(N, 0, 50))
df$y <- 10 + 2 * df$x + 4 * rt(N, 4)  # True params
plot(df$x, df$y)

model1 <- lm(y ~ x, data=df)
stargazer(model1, title="A Model")  # I'd like to produce a similar table for the model below

ll <- function(params) {
    ## Log likelihood for y ~ x + student's t errors
    params <- as.list(params)
    return(sum(dt((df$y - params$const - params$beta*df$x) / params$scale, df=params$degrees.freedom, log=TRUE) - …
Run Code Online (Sandbox Code Playgroud)

optimization r lm stargazer

83
推荐指数
1
解决办法
2521
查看次数

强制mapply返回列表?

假设我有一个创建数据帧的函数.我想用不同的输入值运行该函数,然后将结果整合到一个大数据框中,如下所示:

CreateDataFrame <- function(type="A", n=10, n.true=8) {
  data.frame(success=c(rep(TRUE, n.true), rep(FALSE, n - n.true)), type=type)
}
df <- do.call(rbind, lapply(toupper(letters[1:5]), CreateDataFrame))
Run Code Online (Sandbox Code Playgroud)

我的CreateDataFrame函数有三个参数.在上面的示例中,第二个和第三个参数保持不变.我想像上面一样做,但每次调用都会改变第二个和第三个参数.我想我必须使用mapply,像这样:

mapply("CreateDataFrame", type=toupper(letters[1:5]), n=10, n.true=8:4)
Run Code Online (Sandbox Code Playgroud)

我遇到了麻烦,因为mapply没有返回列表,这阻止了我运行do.call(rbind, mapply(...)).我怎么能得到一个数据框,就像我在顶部的例子中所做的那样?

看起来mapply正在返回一个列表矩阵.我期待它返回一个数据框列表.我该怎么办?

r mapply

17
推荐指数
2
解决办法
4896
查看次数

降低使用recorderjs创建的WAV文件的比特率

我正在尝试在app引擎网站上使用recorderjs,用户上传短音频录音(比如说,长达1到12秒).我注意到我上传的WAV文件比我预期的要大得多.例如,我刚刚创建了一个持续大约9秒的记录,上传的blob是1736769字节,大于1.5兆字节.

题:

如何修改recorderjs代码(或我自己的代码 - 也许我正在使用recorderjs),以便我的音频blob具有较低的比特率?我希望10秒钟的录音能够安全地低于1 MB.

我的猜测是我需要在这里修改encodeWAV函数,或者可能是exportWAV,但我不确定如何.在exportWAV中删除交错缓冲区的每个其他元素是否有意义?有更聪明的方法吗?导出的WAV的比特率如何取决于我的计算机的属性(例如我的声卡的采样率)?

如果它可能有用,我可以在我自己的代码上添加一些细节.

编辑:如果您想查看实际示例,请安装Google Chrome测试版并尝试此页面.在我的电脑上,5-10秒长的录音超过1 MB.

非常感谢,

阿德里安

audio html5 wav audio-recording recorder.js

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

为另一个函数中定义的函数使用相同的参数名称

为什么

f <- function(a) {
    g <- function(a=a) {
        return(a + 2)
    }
    return(g())
}
f(3)  # Error in a + 2: 'a' is missing
Run Code Online (Sandbox Code Playgroud)

导致错误?它与a = a参数有关,特别是与变量名相同的事实.到底发生了什么?

以下是一些按预期工作的类似代码:

f <- function(a) {
    g <- function(a) {
        return(a + 2)
    }
    return(g(a))
}
f(3)  # 5

f <- function(a) {
    g <- function(g_a=a) {
        return(g_a + 2)
    }
    return(g())
}
f(3)  # 5

g <- function(a) a + 2
f <- function(a) g(a)
f(3)  # 5
Run Code Online (Sandbox Code Playgroud)

arguments r function

7
推荐指数
1
解决办法
545
查看次数

在R函数内调用predict()

我想在R中的函数中调用predict(...).我遇到了一些与范围有关的问题,但我无法弄清楚什么是错的或如何解决它.有人可以帮忙吗?例:

df <- data.frame(x=1:20, binary.outcome=1*(runif(20, 0, 1) > 0.60))
summary(df)
logit.model <- glm(df$binary.outcome ~ df$x, family=binomial("logit"), data=df)
summary(logit.model)

PredictOnNewData <- function() {
  df <- data.frame(x=51:100)
  df$probability <- round(predict(logit.model, df, type="response"), digits=3)
  return(df)
}

PredictOnNewData()
Run Code Online (Sandbox Code Playgroud)

最后一行失败了:

错误$<-.data.frame(*tmp*,"概率",值= c(0.274,0.282,:替换有20行,数据有50个另外:警告消息:'newdata'有50行但找到的变量有20行

如果我正确理解错误消息,它看起来像我传递给预测的df对象(...)被评估为父/全局环境中的df.那一行有20行,用于训练.但我希望调用预测(...)在另一个 df数据框上进行评估- 我在PredictOnNewData函数中创建的数据框.如何实现(不更改数据框的名称)?

[现在我重读了这篇文章 - 我向后看了吗?在行中(df $ probability < - ...),其中一个dfs正在以错误的方式进行评估,但是它是哪个?

我也试过get("df",envir = sys.frame()),明确想要在当前函数框架中定义的df对象:

PredictOnNewData <- function() {
  df <- data.frame(x=51:100)
  # df$probability <- round(predict(logit.model, df, type="response"), digits=3)
  df$probability <- round(predict(logit.model, get("df", envir=sys.frame()), type="response"), digits=3)
  return(df)
}

PredictOnNewData() …
Run Code Online (Sandbox Code Playgroud)

r

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

强制facet_wrap填充底行(并在顶行留下任何"间隙")

我想强制facet_wrap从左上角填充,但总是完全填充底行.(也就是说,从左上角加上完全填充底行所需的水平偏移量.)

library(ggplot2)

n <- 1000
df <- data.frame(x=runif(n), y=rnorm(n), label=sample(letters[1:7], size=n, replace=TRUE))
df$label.rev <- factor(df$label, levels=sort(unique(df$label), decreasing=TRUE))

p <- ggplot(df, aes(x=x, y=y)) + geom_point()
p1 <- p + facet_wrap(~ label, ncol=3)
p2 <- p + facet_wrap(~ label, ncol=3, as.table=FALSE)
p3 <- p + facet_wrap(~ label.rev, ncol=3, as.table=FALSE)
Run Code Online (Sandbox Code Playgroud)

p1:我很满意标签的从左到右,从上到下排序,但我希望间隙位于左上角而不是右下角.

p2:Gap现在位于顶行(不幸的是,右上角而不是左上角),但标签顺序错误.

p3:与p2相似; 尝试修复标签订单,但失败了.

我想要像这样订购方面:

_ _ A
B C D
E F G
Run Code Online (Sandbox Code Playgroud)

...所以沿整个底行都有轴,因为我觉得它看起来比默认更好.我怎样才能做到这一点?

r ggplot2

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

为什么使用大熊猫的多处理应用会带来如此惊人的加速?

假设我有一个pandas数据帧和一个我想要应用于每一行的函数.我可以打电话df.apply(apply_fn, axis=1),这应该花费时间线性的大小df.或者我可以拆分df并使用pool.map在每个部分上调用我的函数,然后连接结果.

我期望使用的加速因子pool.map大致等于池中的进程数(new_execution_time = original_execution_time/N,如果使用N个处理器 - 并且假设零开销).

相反,在这个玩具示例中,使用4个处理器时,时间下降到2%左右(0.005272/0.230757).我最多只期望25%.发生了什么事,我不理解什么?

import numpy as np
from multiprocessing import Pool
import pandas as pd
import pdb
import time

n = 1000
variables = {"hello":np.arange(n), "there":np.random.randn(n)}
df = pd.DataFrame(variables)

def apply_fn(series):
    return pd.Series({"col_5":5, "col_88":88,
                      "sum_hello_there":series["hello"] + series["there"]})

def call_apply_fn(df):
    return df.apply(apply_fn, axis=1)

n_processes = 4  # My machine has 4 CPUs
pool = Pool(processes=n_processes)

t0 = time.process_time()
new_df = df.apply(apply_fn, axis=1)
t1 = time.process_time()
df_split …
Run Code Online (Sandbox Code Playgroud)

python performance multiprocessing dataframe pandas

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

带有 ViewPager 的 Android java.lang.IllegalStateException

我用 ViewPager 制作了一个非常简单的 Android 拼图应用程序,让用户可以浏览一系列拼图。我在生产中看到一个错误,我不知道如何重现或调试:

java.lang.IllegalStateException: 
  at android.support.v4.view.ViewPager.a (ViewPager.java:204)
  at android.support.v4.view.ViewPager.c (ViewPager.java:2)
  at android.support.v4.view.ViewPager.onMeasure (ViewPager.java:207)
  at android.view.View.measure (View.java:22002)
  at android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:6580)
  at android.widget.FrameLayout.onMeasure (FrameLayout.java:185)
  at android.view.View.measure (View.java:22002)
  at android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:6580)
  at android.support.v7.internal.widget.ActionBarOverlayLayout.onMeasure (ActionBarOverlayLayout.java:257)
  at android.view.View.measure (View.java:22002)
  at android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:6580)
  at android.widget.FrameLayout.onMeasure (FrameLayout.java:185)
  at android.view.View.measure (View.java:22002)
  at android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:6580)
  at android.widget.LinearLayout.measureChildBeforeLayout (LinearLayout.java:1514)
  at android.widget.LinearLayout.measureVertical (LinearLayout.java:806)
  at android.widget.LinearLayout.onMeasure (LinearLayout.java:685)
  at android.view.View.measure (View.java:22002)
  at android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:6580)
  at android.widget.FrameLayout.onMeasure (FrameLayout.java:185)
  at com.android.internal.policy.DecorView.onMeasure (DecorView.java:721)
  at android.view.View.measure (View.java:22002)
  at android.view.ViewRootImpl.performMeasure (ViewRootImpl.java:2414)
  at android.view.ViewRootImpl.performTraversals (ViewRootImpl.java:2159)
  at android.view.ViewRootImpl.doTraversal …
Run Code Online (Sandbox Code Playgroud)

android illegalstateexception android-viewpager

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

使用html5上传在浏览器中录制的音频

我是HTML,Javascript和公司的新手,所以请原谅我提出一个可能很明显的问题.

我想建立一个webapp,用户可以上传音频和一些自己的信息.我有一个看起来像这样的表单:

<form method="post" action="/add_recording" enctype="multipart/form-data">
  <label>Name: </label>
  <input type="text" name="user_name" maxlength="20" size="20" value="Joe">
  <br>
  <label>Audio File: </label>
  <input type="file" name="user_audio"/>
  <br>
  <input value="Upload" type="submit">
</form>
Run Code Online (Sandbox Code Playgroud)

这可行,但它不是非常用户友好:人们必须弄清楚如何创建自己的音频文件,即使他们知道如何,这很烦人.我想允许用户在浏览器中录制.我找到了https://github.com/mattdiamond/Recorderjshttp://webaudiodemos.appspot.com/AudioRecorder/index.html,这看起来非常酷(暂时忽略了它们只适用于最新版本的铬,据我所知).

我的问题是:我如何修改recorderjs代码,以便记录的blob自动上传到我的表单中,用户无需下载文件并通过单击type ="file"输入手动浏览到它?

我的网络开发技能非常有限,所以我非常感谢任何帮助.我的第一个猜测是自动将音频blob下载到我选择的文件名,并修改表单中的type ="file"输入指向那里,但显然这是不可能的(从我在例如如何设置值中看到的以HTML格式输入文件?).

谢谢,

阿德里安

编辑:这里有一个类似的问题:RecorderJS通过AJAX上传记录的blob.我的问题的一个解决方案是学习AJAX并按照该问题的答案.不过,我有兴趣知道是否有任何方法可以使用老式文件输入(或更普遍的html格式)上传recorderjs音频.

html forms html5 audio-recording

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

构建返回字符串的函数列表

有人可以解释为什么以下代码片段的行为与它一样吗?

l <- list()
AddFn <- function(str) { l[[length(l) + 1]] <<- function() { return(str) }}
AddFn("hello")
AddFn("there")
l[[1]]()  # Returns "hello" as expected
l[[2]]()  # Returns "there" as expected
for (letter in letters) AddFn(letter)
l[[3]]()  # Returns "z"
Run Code Online (Sandbox Code Playgroud)

我期望l[[3]]()回归"a".我错过了什么?我的AddFn函数究竟做了什么?

先感谢您,

阿德里安

r

3
推荐指数
2
解决办法
99
查看次数

干净的方式来计算数组求和的雅可比

我在R中做了一些优化,与此相关,我需要编写一个返回jacobian的函数.这是一个非常简单的雅各比 - 只有零和一个 - 但我想快速干净地填充它.我目前的代码有效,但非常草率.

我有一个四维概率阵列.索引尺寸i, j, k, l.我的约束是,对于每个i, j, k,索引上的概率总和l必须等于1.

我像这样计算我的约束向量:

get_prob_array_from_vector <- function(prob_vector, array_dim) {
    return(array(prob_vector, array_dim))
}

constraint_function <- function(prob_vector, array_dim) {
    prob_array <- get_prob_array_from_vector(prob_vector, array_dim)
    prob_array_sums <- apply(prob_array, MARGIN=c(1, 2, 3), FUN=sum)
    return(as.vector(prob_array_sums) - 1)  # Should equal zero
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:什么是计算jacobian干净,快速的方法as.vector(apply(array(my_input_vector, array_dim), MARGIN=c(1, 2, 3), FUN=sum)) - 即,我constraint_function在上面的代码中 - 关于my_input_vector

这是我的草率解决方案(我从numDeriv包中检查了jacobian函数的正确性):

library(numDeriv)

array_dim <- c(5, 4, 3, 3)

get_prob_array_from_vector <- function(prob_vector, array_dim) …
Run Code Online (Sandbox Code Playgroud)

arrays r derivative matrix-indexing

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

构建 docker 镜像后 Github runner 磁盘空间不足

我有两个 github 存储库(称为 A 和 B),它们都有一个.github/workflows/build_and_test.yml看起来几乎与此相同的文件:

name: Build and test

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  build-with-docker:
    runs-on: ubuntu-20.04
    steps:
      - uses: actions/checkout@v3
      - uses: docker/setup-buildx-action@v2
      - uses: docker/build-push-action@v3
        with:
          tags: my_tag:latest
          load: true
          context: .
          cache-from: type=gha
          cache-to: type=gha,mode=max

      - run: docker run my_tag pytest
Run Code Online (Sandbox Code Playgroud)

在回购协议A中

  • 我的基础镜像Dockerfiler-base:4.2.1,大约 782MB
  • 我构建的镜像最终约为 1.71GB
  • github 工作流程从头到尾运行得很愉快(图像构建,步骤docker run my_tag pytest运行,一切都很好)

在仓库 B 中

  • 我的基础镜像Dockerfilepytorch/pytorch,大约 5.82GB
  • 我构建的镜像最终约为 …

diskspace docker github-actions

3
推荐指数
2
解决办法
5697
查看次数

更好的方法是将这个函数应用到数据帧的每一行?

我想将一个函数应用于数据帧的每一行,如下所示.我知道如何在数据框只包含数字的情况下使用apply,但是如果行包含booleans/logicals,字符串和整数呢?例:

df <- data.frame(x=1:10,
                 y=c(TRUE, FALSE),
                 z=letters[1:10],
                 stringsAsFactors=FALSE)

RowFunction <- function(row) {
  if (row$y) return(row$x)
  return (row$z)
}

sapply(1:dim(df)[1], function(i) { RowFunction(df[i, ]) })
Run Code Online (Sandbox Code Playgroud)

有一个更好的方法吗?我的第一个想法是apply(df, 1, RowFunction)在添加row <- as.list(row)到RowFunction的开头之后使用,但这不起作用,因为应用将df强制转换为数组,该数组无法处理包含不同数据类型的行.

仅仅为了我的R知识,我想知道是否有更清洁的方法来做到这一点sapply(1:dim(df)[1], ... ).有任何想法吗?

提前致谢!

r

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