2014-11-23 2 views
0

Я знаю, что есть сообщения по этой теме, но ничего, что я читал и не пытался до сих пор, похоже, работает. Это должно быть просто, но, по-видимому, это не так. У меня есть файл параметров, содержащий оба символа и текст. Когда я прочитал его с:Чтение текстового файла, содержащего числовые значения в R

parmData <- read.table("ParameterData.txt”) 

и я печатаю значения на экране. Я получаю следующий кадр. Каждый объект в кадре, по-видимому, является фактором.

 V1 
1 10 
2  5 
3  8 
4 0.3 
5 0.5 
6 VAL 

я впервые попробовал загрузки их в отдельно обозначенных переменных, таких как:

var1 <- as.numeric(parmData[1,1]) ## with as.character used for the VAL value 

Все идет хорошо, пока я не дойдете до действительных чисел как 0.3, 0.5 и т.д. Преобразование в числовой преобразует эти значения к целым числам ... 3 и 5. Я пробовал все ... например, используя значения parmData без переопределения, но это фактически factors, и факторы не работают в некоторых из методов, которые я использую.

Несомненно, это легко и я ослеплен. Я хочу, чтобы числовые значения рассматривались как числовые и символьные значения, рассматриваемые как символы. Как мне это сделать?

Вот что файл данных выглядит следующим образом:

10 ## lookback days 
5 ## lookback days 
8 ## Volatility lookback days 
0.3 ## weighting 1 
0.5 ## weighting 2 
0.2 ## Volatility weighting 
8 ## averaging period 1 
10 ## averaging period 2 
12 ## averaging period 3 
"SHY" ## cutoff asset 
0.03 ## no-risk percentage (decimal) 
0.3 ## maximum amount allowed (decimal) 
5 ## lookback days for correlation 
5 ## lookback days covariance 
+1

'parmData <- read.table (" ParameterData.txt», na.strings = 'VAL')' – rawr

ответ

2

Вы не можете иметь характер и числовой в том же столбце. Вы также не можете преобразовать факторы непосредственно в числовые и получить правильное значение. Факторы хранятся как целочисленные значения, которые, вероятно, будут отличаться от значений, которые у вас есть. Мы должны сначала преобразовать в символ, а затем в числовой.

VAL должно быть NA, или весь столбец должен быть символом. Для числового:

suppressWarnings(with(df, as.numeric(levels(V1)[V1]))) 
#[1] 10.0 5.0 8.0 0.3 0.5 NA 

И персонаж просто удалить as.numeric вызов сверху. Вы также можете удалить звонок suppressWarnings, если хотите. Это только предупреждает нас о введенных значениях NA.


Update: На основании вашего редактирования, я хотел бы использовать scan со многими из своих аргументов.

scan(text = txt, what = character(), quote = "\"", sep = "\n", 
    comment.char = "#", strip.white = TRUE, quiet = TRUE) 
# [1] "10" "5" "8" "0.3" "0.5" "0.2" "8" "10" "12" "SHY" 
# [11] "0.03" "0.3" "5" "5" 

Адрес text = txt будет заменен на ваше имя файла. И затем используйте as.numeric на этом векторе, если вы хотите преобразовать в числовые числа.

txt <- '10 ## lookback days 
5 ## lookback days 
8 ## Volatility lookback days 
0.3 ## weighting 1 
0.5 ## weighting 2 
0.2 ## Volatility weighting 
8 ## averaging period 1 
10 ## averaging period 2 
12 ## averaging period 3 
"SHY" ## cutoff asset 
0.03 ## no-risk percentage (decimal) 
0.3 ## maximum amount allowed (decimal) 
5 ## lookback days for correlation 
5 ## lookback days covariance ' 
+0

мне нужно как-то входной параметр персонажа Итак, вы говорите, я должен иметь отдельный. файл данных для этого одного символьного параметра? – Ernie

+0

Нет, я говорю, что если все значения не являются значениями «VAL», вы можете перечитать файл с вызовом 'read.table' выше, и он преобразует их все к NA –

+0

ОК. Я думаю, что я запутываю воду. Я отредактировал свое сообщение, чтобы показать, как выглядит входной файл на диске. Я не могу использовать комментарии, если не использую read.table, я считаю. Но, они не нужны. – Ernie