4

我需要输入一个字符串向量。每个元素都是一个变量名,将在以后的循环中使用。输入所有引号和逗号很痛苦 - 有没有办法像这样输入它(这是我可以在 Stata 中做的事情):

balance.vars <- c(a3 a4 a5_1 a5_2 a5_3 a6_1 a6_2 a6_3 a6_4
a6_5 a6_6 a8 a8_1 a8_2 a8_3 a9 a9_3
a10_1 a10_2 a10_3)
etc.
4

4 回答 4

4

您可以scan使用text

balance.vars <- scan(text='a3 a4 a5_1 a5_2 a5_3 a6_1 a6_2 a6_3 a6_4
a6_5 a6_6 a8 a8_1 a8_2 a8_3 a9 a9_3
a10_1 a10_2 a10_3',what='char')

但我会避免使用许多这样的分隔变量。什么不使用向量或列表?也许如果您更好地解释您的工作流程以及您想做什么,我们可以提出更多 R 风格的解决方案。

您还可以使用paste创建这样的列表,例如:

paste(paste0('a',rep(3:10,each=3)),rep(0:3,8),sep='_')

OP 澄清后编辑,似乎他想过滤 data.frames 变量。

 varnames  <- colnames(d)[grepl('^a[0-9]+(_[1-3])?',colnames(d))]
 formulas <- paste(varnames, "group", sep = " ~ ") 
 res <- lapply(formulas, function(f) t.test(as.formula(f), data = d))
于 2013-07-26T15:20:26.010 回答
2

R 不支持这种风格的函数调用。但是,如果您将所有变量名放在一个文本文件中(每行一个),如下所示:

a3
a4
a5_1
a6_1
etc. 

然后你可以这样做:

balance.vars <- scan('varnames.txt', what='')

并且不必键入所有这些引号和逗号。

于 2013-07-26T15:17:08.267 回答
1

怎么样:

balance.vars <- unlist(strsplit("a3 a4 a5_1 a5_2 a5_3 a6_1 a6_2 a6_3 a6_4 a6_5 a6_6 a8 a8_1 a8_2 a8_3 a9 a9_3 a10_1 a10_2 a10_3", " "))

或者:

balance.vars <- unlist(strsplit("a3 a4 a5_1 a5_2 a5_3
a6_1 a6_2 a6_3 a6_4 a6_5 a6_6 a8 a8_1 a8_2 a8_3 a9 a9_3
a10_1 a10_2 a10_3", "\\W", perl=TRUE))

如果您想使用换行符来提高可读性。:-)

于 2013-07-26T15:26:25.747 回答
0

使用 qdap 包:

library(qdap)

qcv(terms="a3 a4 a5_1 a5_2 a5_3 a6_1 a6_2 a6_3 a6_4
a6_5 a6_6 a8 a8_1 a8_2 a8_3 a9 a9_3
a10_1 a10_2 a10_3")
于 2013-07-26T17:32:30.370 回答