2016-09-21 3 views
-2

Я новичок в R, поэтому я уверен, что это просто, но я не могу понять это. Вы можете увидеть структуру моего объекта n ниже. Я хочу пропустить n и взять каждое ненулевое значение с правой стороны двоеточия (например, «57454470») и применить к нему функцию.Получение значений из списка (правая сторона двоеточия)

> str(n) 
List of 1 
$ :List of 10 
    ..$ 15793766: NULL 
    ..$ 15793767: chr "57454470" 
    ..$ 15793769: chr "123652395" 
    ..$ 15793770: chr "38098549" 
    ..$ 15793771: chr "56864789" 
    ..$ 15793776: chr "38722835" 
    ..$ 15793779: chr "37962343" 
    ..$ 15793784: chr "2100162920" 
    ..$ 15793787: chr "2099439832" 
    ..$ 15793791: chr "37992986" 
    ..- attr(*, "dim")= int 10 
    ..- attr(*, "dimnames")=List of 1 
    .. ..$ rmaddrs$ReportID: chr [1:10] "15793766" "15793767" "15793769" "15793770" ... 
    ..- attr(*, "call")= language by.data.frame(data = rmaddrs, INDICES = rmaddrs$ReportID, FUN = getValueFromXML) 
    ..- attr(*, "class")= chr "by" 

Вот результат dput:

dput(n[1]) 
    list(structure(list(`15793766` = NULL, `15793767` = "57454470", 
     `15793769` = "123652395", `15793770` = "38098549", `15793771` = "56864789", 
     `15793776` = "38722835", `15793779` = "37962343", `15793784` = "2100162920", 
     `15793787` = "2099439832", `15793791` = "37992986"), .Dim = 10L, .Dimnames = structure(list(
     `rmaddrs$ReportID` = c("15793766", "15793767", "15793769", 
     "15793770", "15793771", "15793776", "15793779", "15793784", 
     "15793787", "15793791")), .Names = "rmaddrs$ReportID"), call = by.data.frame(data = rmaddrs, 
     INDICES = rmaddrs$ReportID, FUN = getValueFromXML), class = "by")) 

UPDATE: Я удалил «печать» тестирование, и я пытаюсь использовать среднее значение() для лучшего теста.

sapply(n[1], function(x) mean(x, na.rm=TRUE)) 

Тогда я должен был использовать unlist и as.numeric и теперь я думаю, что у меня есть то, что мне нужно использовать мои пользовательские функции.

+0

Несомненно, ваша функция не печатается. – Roland

+1

Нет. Я сказал «как тест». Конечно, вы можете быть более полезными. – influent

+0

Прошу прощения, но печать не является хорошей тестовой функцией, поскольку она печатает как побочный эффект. Это не очевидно из вопроса, если это вас сбивает с толку. – Roland

ответ

1

Способ, которым вы используете sapply, печатает все, но затем он также возвращает объект, который (поскольку он не назначен) также печатается. Для того, чтобы избежать печати возвращаемого объекта, вы можете обернуть в invisible() или присвоить ему

invisible(sapply(n[1], print)) 
xx = sapply(n[1], print) 

(Примечание. Эта печать так же, как если вы входите 1 + 1 в консоли, в результате 2 напечатает Но если ввести x = 1 + 1 ничего не печатает. Я также упростил ваш sapply, исключив анонимную функцию, но это не связано с вашей проблемой.)

+0

Это помогает, но не доходит до сути моего вопроса, а именно, как извлечь значения только с правой стороны двоеточия (т. Е. N [[1]]). – influent

+1

Хорошо, я думаю, что понимаю, что вы имеете в виду, но ваше использование 'n [[1]]' сбивает с толку, так как 'n [[1]]' - это список из 10 ... может быть, вы имеете в виду, что хотите [n [ [1]] [[1]] ',' n [[1]] [[2]] 'и т. Д.? И все эти отдельные элементы имеют имена и значения, «* с правой стороны двоеточия *» вы подразумеваете, что вы хотите, чтобы значения печатались без имен? Т.е., 'print (noname (n [[1]] [[1]]))', 'print (noname (n [[1]] [[2]])'? Так что, возможно, вы хотите 'function (x) print (noname (x)) '? Прежде чем я сделаю больше работы, не могли бы вы (1) воспроизвести выборочную выборку ваших данных с помощью' dput() 'и (2), чтобы этот пример явно отображал ваш желаемый результат? – Gregor

+0

You «Верно, спасибо!» Я добавил результаты dput (n [1]) к моему вопросу. Я действительно хочу, чтобы n [[1]] [1], по-видимому, я думал, что испытал это. Я посмотрю, позволяет ли это я использую свою пользовательскую функцию. – influent

Смежные вопросы