Использование readline () внутри цикла for - PullRequest
1 голос
/ 20 сентября 2010

У меня есть функция, следующая:

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 ]

2 голосов
/ 20 сентября 2010

Раньше это работало только потому, что когда вы вставили весь код на верхнем уровне, он был выполнен немедленно, и вызов readline () использовал следующие N строк. В функции или любой управляющей структуре она попытается проанализировать ее как код R, что приведет к сбою.

Многострочная строка может заменить передаваемый наследственный код:

lvls = strsplit('
Never Heard of
Heard of but Not at all Familiar
Somewhat Familiar
Familiar
Very Familiar
Extremely Familiar
', '\n')[[1]][-1]
1 голос
/ 20 сентября 2010

Вместо цикла for вы можете просто использовать scan без имени файла (и what = '' и, возможно, sep = '\ n'.

> tmp <- scan(what='', sep='\n')
1: hello there
2: some more
3: 
Read 2 items
> tmp
[1] "hello there" "some more"  
> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...