在for循环中使用readline()

时间:2010-09-20 04:52:32

标签: r

我有一个功能,如下:

f.factor <- function(x) {
print(length(unique(x)))
z <- 1 
    for (i in 1:length(unique(x))) {
        z[i] <- readline(":")
    }
x <- factor(x, labels=c(z)) 
return(x)
}

基本上,它允许我复制/粘贴/输入或只是简单地在我的脚本中写入特定变量的因子,而不必输入c(“..”,“...”)一百万次。

当我尝试在循环中使用此函数时,我遇到了一个问题,也许循环结构不允许在循环中读取行?

for(i in 1:ncol(df.)) {
df[,paste("q4.",i,sep="")] <- f.factor(df[,paste("q4.",i,sep="")])
Never Heard of
Heard of but Not at all Familiar
Somewhat Familiar
Familiar
Very Familiar
Extremely Familiar
}

最后,我正在寻找一种指定因子标签的方法,而不必反复重写。

2 个答案:

答案 0 :(得分:2)

那之前只有工作,因为当您将所有代码粘贴到顶层时,它立即被执行,而readline()调用使用了以下N行。在函数或任何控制结构中,它将尝试将其解析为将失败的R代码。

多行字符串可代表可通过的heredoc:

lvls = strsplit('
Never Heard of
Heard of but Not at all Familiar
Somewhat Familiar
Familiar
Very Familiar
Extremely Familiar
', '\n')[[1]][-1]

答案 1 :(得分:1)

而不是for循环,你可以使用没有文件名的扫描(以及什么=''和可能sep ='\ n'。

> tmp <- scan(what='', sep='\n')
1: hello there
2: some more
3: 
Read 2 items
> tmp
[1] "hello there" "some more"  
>