r - 从条件公式中提取信息

标签 r formula

我想写一个 R 函数,它接受一个公式作为它的第一个参数,类似于 lm() 或 glm() 和 friend 。在这种情况下,它是一个函数,它接受一个数据帧并在 SVMLight 中写出一个文件。格式,具有以下一般形式:

<line> .=. <target> <feature>:<value> <feature>:<value> ... <feature>:<value> # <info>
<target> .=. +1 | -1 | 0 | <float> 
<feature> .=. <integer> | "qid"
<value> .=. <float>
<info> .=. <string>

例如,以下数据框:
  result qid     f1     f2     f3     f4   f5     f6     f7     f8
1     -1   1 0.0000 0.1253 0.0000 0.1017 0.00 0.0000 0.0000 0.9999
2     -1   1 0.0098 0.0000 0.0000 0.0000 0.00 0.0316 0.0000 0.3661
3      1   1 0.0000 0.0000 0.1941 0.0000 0.00 0.0000 0.0509 0.0000
4     -1   2 0.0000 0.2863 0.0948 0.0000 0.34 0.0000 0.7428 0.0608
5      1   2 0.0000 0.0000 0.0000 0.4347 0.00 0.0000 0.9539 0.0000
6      1   2 0.0000 0.7282 0.9087 0.0000 0.00 0.0000 0.0000 0.0355

将表示如下:
-1 qid:1 2:0.1253 4:0.1017 8:0.9999
-1 qid:1 1:0.0098 6:0.0316 8:0.3661
1  qid:1 3:0.1941 7:0.0509
-1 qid:2 2:0.2863 3:0.0948 5:0.3400 7:0.7428 8:0.0608
1  qid:2 4:0.4347 7:0.9539
1  qid:2 2:0.7282 3:0.9087 8:0.0355

我想编写的函数将被称为这样的:
write.svmlight(result ~ f1+f2+f3+f4+f5+f6+f7+f8 | qid, data=mydata, file="out.txt")

甚至
write.svmlight(result ~ . | qid, data=mydata, file="out.txt")

但我不知道如何使用 model.matrix()和/或 model.frame()知道它应该写哪些列。这些是正确的事情吗?

非常感谢任何帮助!

最佳答案

部分回答。您可以为公式对象添加下标以获取公式的解析树:

> f<-a~b+c|d
> f[[1]]
`~`
> f[[2]]
a
> f[[3]]
b + c | d
> f[[3]][[1]]
`|`
> f[[3]][[2]]
b + c
> f[[3]][[3]]
d

现在你需要的只是遍历这棵树的代码。

更新:这是一个遍历树的函数示例。
walker<-function(formu){
  if (!is(formu,"formula"))
    stop("Want formula")
  lhs <- formu[[2]]
  formu <- formu[[3]]

  if (formu[[1]]!='|')
    stop("Want conditional part")

  condi <- formu[[3]]

  flattener <- function(f) {if (length(f)<3) return(f);
                            c(Recall(f[[2]]),Recall(f[[3]]))}
  vars <- flattener(formu[[2]])

  list(lhs=lhs,condi=condi,vars=vars)
}

walker(y~a+b|c)

另请查看 terms.formula 的文档和 terms.object .查看一些采用条件公式的函数的代码会有所帮助,例如。 lmer函数在 lme4包裹。

关于r - 从条件公式中提取信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2427279/

相关文章:

arrays - 当字符小于 255 时 VBA FormulaArray 范围类错误

excel - ISNA + Vlookup 功能不起作用

Excel公式优化

r - Shiny 模块中的 updateSelectizeInput

javascript - 从 R 中的 finviz 中抓取表格

r - 在 dplyr 中汇总并为没有值的类别插入 0

excel - 获取一天最后一个条目的值

php - 如何从日期中获取天数?

r - R中的最大情节点?

r - cbind 用数字替换字符串?