Я изучаю R, поэтому мне жаль, если мой вопрос звучит слишком основательно. Вот функция, которую я написал для создания подтаблицы из таблицы. Я следую за книгой Нормана Матлоффа. Итак, мне снова жаль, если вы считаете, что для этого существует более короткий способ. Я учусь сейчас, так что более длинные методы только помочь мне, чтобы подтвердить свое понимание о Rdo.call ("[" ...) function in R
subtable <- function(tbl,subnames)
{
tblarray <- unclass(tbl)
dcargs <-list(tblarray)
ndims <- length(subnames) # number of dimensions
for(i in 1:ndims)
{
dcargs[[i+1]]<-subnames[[i]]
}
subarray <-do.call("[",dcargs) ###LINE1###
dims <-lapply (subnames,length)
subtbl<-array(subarray,dims,dimnames = subnames)
class(subtbl)<-"table"
return(subtbl)
}
Теперь, когда я вызываю функцию с помощью:
ct<-read.table("ct.dat",header=T)
где ct.dat является:
"Vote.for.X" "Voted.for.X.Last.Time"
"Yes" "Yes"
"Yes" "No"
"No" "No"
"Not Sure" "Yes"
"No" "No"
Теперь, я бы назвал
cttable<-table(ct)
subtable(cttable,subnames<-list(Vote.for.X=c("No","Yes"), Voted.for.X.Last.Time=c("No","Yes"))
Я получил правильную подтаблицу. Однако я не знаю, что делает LINE1.
Я выполнил код по очереди, чтобы узнать, что происходит. Вот что я получил после вызова для цикла:
> dcargs
[[1]]
Voted.for.X.Last.Time
Vote.for.X No Yes
No 2 0
Not Sure 0 1
Yes 1 1
[[2]]
[1] "No" "Yes"
[[3]]
[1] "No" "Yes"
Теперь я понимаю, что dcargs будет аргумент функции для «[». Помимо этого, я не знаю, что будет с LINE 1. Я действительно застрял.
Любая помощь пожалуйста?
'do.call (\' [\ ', dcargs)' переводится в 'tbl [c (« Нет »,« Да »), c (« Нет »,« Да »)]' – thelatemail
Возможно, это будет просветительское - все следующие идентичны - 'do.call (\' [\ ', list (cttable, c (« Нет »,« Да »), c (« Нет »,« Да »)))' и '\ '[\' (cttable, c («Нет», «Да»), c («Нет», «Да»)) 'и' cttable [c («Нет», «Да»), c («Нет») , «Да»)] ' – thelatemail
спасибо thelatemail. У меня есть два вопроса: 1) почему вы использовали таблицу« tbl »? Я вообще не вижу« tbl »в строке 1. 2) как я могу узнать, какая таблица вызывается? Я бы оценил ваши мысли. – watchtower