У меня есть файлы matlab с целым числом в каждом имени моих переменных внутри (кроме первого). Я хочу, чтобы цикл совпадал с именем целых чисел. Существует мой код:Объединение строковых имен переменных matlabfile в R
library('R.matlab')
mat <- readMat('SeriesContPJM.mat')
#str(mat)
#typeof(mat)
#mat[[1]]
write.csv(mat$vol.PJM$data[[4]][[1]], "PJM.csv")
i = 2
while (i < 7)
{
write.csv(get(paste("mat$vol.PJM", as.character(i), "$data[[4]][[1]]", sep = "")), paste(paste("PJM", as.character(i), sep="_"), "csv", sep ="."))
i = i + 1
}
У меня есть write.csv(mat$vol.PJM$data[[4]][[1]], "PJM.csv")
, который дает мне хороший вывод. Я хотел бы то же самое для других имен переменных в цикле, но я получаю следующее: вывод
+ Error in get(paste("mat$vol.PJM", as.character(i), "$data[[4]][[1]]", (from importpjm.R#10) :
objet 'mat$vol.PJM2$data[[4]][[1]]' introuvable
«introuvable» означает «не найдено» на французском языке.
Большое спасибо за этот очень подробный ответ. Ваше окончательное решение очень элегантно. Просто вопрос: что [['изменяется по сравнению с' $ '? –
'[[' может использоваться со строками (и, следовательно, с именами, хранящимися как строки в переменных), тогда как '$' является «магическим ярлыком», который не работает со строками. Поскольку 'vol' - это строка,' mat [[vol]] 'работает, тогда как' mat $ vol' не будет работать. [См. Этот вопрос для получения дополнительной информации] (http://stackoverflow.com/q/18222286/903061). Для бит '[[" data "]]' это не имеет большого значения, но поскольку все остальное использует '[[' казалось, было приятно сохранить его согласованным. – Gregor