在函数输出中也打印行

时间:2014-06-19 16:47:28

标签: r

所以,我在R中做了这个功能。

> reps <- function(s, n) paste(rep(s, n), collapse = "") # repeat s n times
> 
> find.string <- function(strinag, th = 3, len = floor(nchar(string)/th)) {
+     for(k in len:1) {
+         pat <- paste0("(.{", k, "})", reps("\\1", th-1))
+         r <- regexpr(pat, string, perl = TRUE)
+         if (attr(r, "capture.length") > 0) break
+     }
+     if (r > 0) substring(string, r, r + attr(r, "capture.length")-1) else ""
+ }

此功能主要用于查找模式。例如:如果我输入序列为100100100,则输出“100”(满足最小阈值的最大长度模式= 3)。但是,如果传递了诸如100110之类的字符串,则它不会输出任何内容,因为没有形成连续模式。

现在,我将此函数应用于具有这种格式的文件(1000行)。

    V1  V2  V3   V4  V5  V6  V7  V8  V9  V10  V11  
0   2    4   1   0   0   1   0   0   1   0     0
1   1    2   1   0   0   1   0   1   0   1     0  
2   ....................................
3
4
5

现在,之后,我这样做了,不同列(V3-V11)中的数字作为字符串传递给我所做的函数。

输入&lt; - do.call(cbind,df [,3:ncol(df)])

然后,

 apply(input, 1, function(x) print(gsub(", ","",toString(x)))).

但是,这只会产生输出,

输出文件:

110  
01
10 
10

我想要的是,产生输出的行的前两列也应该包含在输出文件中。

所以,假设第1行产生一个输出,因此,它应该包含在输出文件中,

 2  4  100
 1  2  10

................

为了做到这一点,我应该对现有代码进行哪些更改?

1 个答案:

答案 0 :(得分:0)

我假设您写入输出文件的数据存储在某个变量中,比如说x。由于您在数据的所有行中应用了函数,因此输出和行的顺序将相同。因此,您可以在

中重新绑定前两列
write.table(cbind(df[,1:2], x), "outfile.txt")

这应该可以正确恢复原始行。