标签: substitution

如何为R中的回归量创建"宏"?

对于长模型和重复模型,我想创建一个"宏"(所谓的Stata,并在那里完成global var1 var2 ...),其中包含模型公式的回归量.

例如来自

library(car)
lm(income ~ education + prestige, data = Duncan)
Run Code Online (Sandbox Code Playgroud)

我想要的东西:

regressors <- c("education", "prestige")
lm(income ~ @regressors, data = Duncan)  
Run Code Online (Sandbox Code Playgroud)

我能找到这种方法.但我在回归量上的应用不起作用:

reg = lm(income ~ bquote(y ~ .(regressors)), data = Duncan)
Run Code Online (Sandbox Code Playgroud)

因为它抛出了我:

Error in model.frame.default(formula = y ~ bquote(.y ~ (regressors)), data =
Duncan,  :  invalid type (language) for variable 'bquote(.y ~ (regressors))'
Run Code Online (Sandbox Code Playgroud)

即使是同一问题的公认答案:

lm(formula(paste('var ~ ', regressors)), data = Duncan)
Run Code Online (Sandbox Code Playgroud)

罢工并告诉我:

Error in model.frame.default(formula = formula(paste("var ~ ", …
Run Code Online (Sandbox Code Playgroud)

r substitution lm stata stata-macros

18
推荐指数
2
解决办法
451
查看次数

VIM,对多个文件运行命令

我有一堆sass文件,我的设计师使用了错误的语法.我想,:margin-top 1px但他做到了margin-top: 1px

所以我轻松写了一个子命令:

:rubydo sub! /([\w-]+):/,':\1'
Run Code Online (Sandbox Code Playgroud)

这样可以工作并修复所有冒号并将它们移动到我想要的位置.我在stylesheets目录中有大约50个sass文件.如何一次性对所有文件运行此命令?我真的不确定如何解决这个问题vim.也许与某事有关grep?我不能告诉你.

vim batch-file substitution

17
推荐指数
3
解决办法
9209
查看次数

当key是变量时,如何从jinja中的字典中获取值?

我正在尝试从jinja2中的python字典中检索条目,但问题是我不知道我想提前访问什么密钥 - 密钥存储在一个名为的变量中s.course.所以我的问题是我需要双重替换这个变量.我不想使用for循环,因为这将超过必要的字典方式.这是我创建的一种解决方法,但是s.course值可能会发生变化,所以显然硬编码就像这样很糟糕.我希望它的工作原理如下:

{% if s.course == "p11" %}
    {{course_codes.p11}}
{% elif s.course == "m12a" %}
    {{course_codes.m12a}}
{% elif s.course == "m12b" %}
    {{course_codes.m12b}}
{% endif %}
Run Code Online (Sandbox Code Playgroud)

但我希望它看起来像这样:

{{course_codes.{{s.course}}}}
Run Code Online (Sandbox Code Playgroud)

谢谢!

python variables dictionary substitution jinja2

17
推荐指数
3
解决办法
3万
查看次数

用vim中的第n个单词替换

我看到了其他问题涉及找到第n次出现的单词/模式,但我找不到你如何实际替换vim中第n次出现的模式.有一种明显的方法可以对所有事件进行硬编码

:s/.*\(word\).*\(word\).*\(word\).*/.*\1.*\2.*newWord.*/g 
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法呢?

regex vim sed substitution

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

Maven:没有为pom的/ project/version标签进行属性替换?

http://maven.apache.org/pom.html#Properties表示属性"值可在POM内的任何位置访问".

这应该是" 在POM内的大多数地方都可以访问"吗?

我可以指定依赖的版本没有问题,如下所示:

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>${junit.version}</version>
    <scope>test</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)

但是项目本身的版本如何:

<project xmlns="http://maven.apache.org/POM/4.0.0" ...>

    <modelVersion>4.0.0</modelVersion>
    <groupId>com.mycompany.app</groupId>
    <artifactId>my-app</artifactId>
    <version>${myversion}</version>

    <properties>
        <myversion>8</myversion>
    </properties>

    <modules>
        <module>alpha</module>
        <module>beta</module>
    </modules>
    ...
Run Code Online (Sandbox Code Playgroud)

如果我尝试这个<version>将不会取值8.这里我在pom中定义了$ {myversion}但是如果我在命令行中指定-Dmyversion = 8,情况似乎也是如此.

如果其中一个模块使用硬编码版本号指定其父级,如下所示:

<parent>
    <groupId>com.mycompany.app</groupId>
    <artifactId>my-app</artifactId>
    <version>8</version>
</parent>
Run Code Online (Sandbox Code Playgroud)

当我尝试构建然后当maven来看模块的pom时,它会说它无法找到版本8的给定父pom.

但是,如果我将父版本中的版本硬编码为8,而不是使用$ {myversion},那么一切正常.

所以在我看来,父pom的/ project/version标签不会发生属性替换.

是这种情况还是对我似乎看到的内容有其他解释?

问候,

/乔治

maven-2 properties substitution pom.xml

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

默认替换python脚本中的%s

有时在Python脚本中,我看到如下行:

cmd = "%s/%s_tb -cm cond+line+fsm -ucli -do \"%s\""
Run Code Online (Sandbox Code Playgroud)

%s上面的行在哪里被替换?Python有一些字符串堆栈,它会弹出并替换它们%s吗?

python string substitution

15
推荐指数
3
解决办法
8万
查看次数

如何避免Java ResourceBundle字符串中的重复?

我们有很多字符串包含相同的子字符串,从关于检查日志或如何联系支持的句子到包含公司或产品名称的类似品牌的字符串.重复导致了我们自己的一些问题(主要是拼写错误或复制/粘贴错误),但它也会导致问题,因为它增加了翻译者必须翻译的文本数量.

我提出的解决方案是这样的:

public class ExpandingResourceBundleControl extends ResourceBundle.Control {
  public static final ResourceBundle.Control EXPANDING =
    new ExpandingResourceBundleControl();

  private ExpandingResourceBundleControl() { }

  @Override
  public ResourceBundle newBundle(String baseName, Locale locale, String format,
                                  ClassLoader loader, boolean reload)
    throws IllegalAccessException, InstantiationException, IOException {

      ResourceBundle inner = super.newBundle(baseName, locale, format, loader, reload);
      return inner == null ? null : new ExpandingResourceBundle(inner, loader);
  }
}
Run Code Online (Sandbox Code Playgroud)

ExpandingResourceBundle 委托实际资源包但执行{{this.kind.of.thing}}的转换以查找资源中的密钥.

每当你想要获得其中一个,你必须去:

ResourceBundle.getBundle("com/acme/app/Bundle", EXPANDING);
Run Code Online (Sandbox Code Playgroud)

这工作正常 - 一段时间.

最终发生的是一些新代码(在我们的例子中是自动生成的代码,它是由马蒂斯吐出来的)在不指定自定义控件的情况下查找相同的资源包.如果你编写一个简单的单元测试来调用它然后没有,这似乎是不可重现的,但它是在应用程序运行真实时发生的.不知何故,内部缓存ResourceBundle弹出好的值并用破坏的值替换它.我还没弄清楚为什么Sun的jar文件是在没有调试信息的情况下编译的,所以调试它是一件苦差事.

我的问题:

  1. 有没有办法全局设置我可能不知道的默认ResourceBundle.Control?这样可以相当优雅地解决所有问题.

  2. 有没有其他方式优雅地处理这种事情,也许根本没有篡改ResourceBundle类?

java resourcebundle substitution

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

如何使用Vim基于模式将文本拆分成多行?

假设你有这个文字:

name1 = "John"; age1 = 41;
name2 = "Jane"; age2 = 32;
name3 = "Mike"; age3 = 36;
...
Run Code Online (Sandbox Code Playgroud)

并且您希望将每一行拆分为两行以得到如下结果:

name1 = "John";
age1 = 41;
name2 = "Jane";
age2 = 32;
name3 = "Mike";
age3 = 36;
...
Run Code Online (Sandbox Code Playgroud)

你会如何自动化这个操作?

一些说明:

  1. 我已经尝试过以下方法:
    (1)在virtual-vode中选择文本,
    (2)执行:'<,'>:norm ^3f r^M***,
    但它不能正常工作; 它只分割了一半的行,因为在每一行被打破之后,该命令的下一次重复将应用于其余的虚线而不是下一行!
  2. 这可以通过宏实现,但我正在寻找更优雅的解决方案.


***序列说明:

- norm用于在正常模式下执行以下命令
- ^用于将光标移动到行的开头
- 3f<space>用于将光标移动到行中的第3个空格
- r^M用新行替换该空格

vi vim newline line-breaks substitution

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

用空字符串替换:意外结果

为什么两个打印的数字不同?

#!/usr/bin/env perl
use warnings;
use 5.10.1;

my $sep = '';
my $number = 110110110110111;

$number =~ s/(\d)(?=(?:\d{3})+\b)/$1$sep/g;
say "A: <$number>";

$number =~ s/\Q$sep\E//g;
say "B: <$number>";
Run Code Online (Sandbox Code Playgroud)

输出:

A: <110110110110111>
B: <11111111111>
Run Code Online (Sandbox Code Playgroud)

string perl substitution

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

使用data.table作为参数在函数内使用deparse(substitute())

如果我想将函数的参数解析为错误或警告,如果参数转换为函数中的data.table,则会发生奇怪的事情:

e <- data.frame(x = 1:10)
### something strange is happening
foo <- function(u) {
  u <- data.table(u)
  warning(deparse(substitute(u)), " is not a data.table")
  u
}
foo(e)

##  foo(e)
##      x
##  1:  1
##  2:  2
##  3:  3
##  4:  4
##  5:  5
##  6:  6
##  7:  7
##  8:  8
##  9:  9
## 10: 10
## Warning message:
## In foo(e) :
##   structure(list(x = 1:10), .Names = "x", row.names = c(NA, -10L), class …
Run Code Online (Sandbox Code Playgroud)

r substitution data.table

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