我有一个功能,如下:
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
}
最后,我正在寻找一种指定因子标签的方法,而不必反复重写。
答案 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"
>