Подмножество файлов SPSS с использованием R [duplicate]

Поскольку люди, похоже, обращаются к этому вопросу, когда речь заходит об ошибках компоновщика, я собираюсь добавить это здесь.

Одной из возможных причин ошибок компоновщика с GCC 5.2.0 является то, что новая библиотека libstdc ++ ABI теперь выбран по умолчанию.

Если вы получаете ошибки компоновщика о неопределенных ссылках на символы, которые включают типы в пространстве имен std :: __ cxx11 или теге [abi: cxx11], то это, вероятно, указывает на то, что вы пытаетесь связать файлы объектов, которые были скомпилированы с различными значениями для макроса _GLIBCXX_USE_CXX11_ABI. Это обычно происходит при подключении к сторонней библиотеке, которая была скомпилирована с более старой версией GCC. Если сторонняя библиотека не может быть перестроена с новым ABI, вам нужно будет перекомпилировать свой код со старым ABI.

. Если вы вдруг получите ошибки компоновщика при переключении на GCC после 5.1.0 это было бы замечательно.

54
задан rcs 30 August 2013 в 09:38
поделиться

2 ответа

Вы можете так же легко получить доступ к каждому элементу в списке, используя, например, path[[1]]. Вы не можете поместить набор матриц в атомный вектор и получить доступ к каждому элементу. Матрица представляет собой атомный вектор с атрибутами измерения. Я бы использовал структуру списка, возвращенную split, для чего она была предназначена. Каждый элемент списка может хранить данные разных типов и размеров, поэтому он очень универсален, и вы можете использовать функции *apply для дальнейшей работы с каждым элементом в списке. Пример ниже.

#  For reproducibile data
set.seed(1)

#  Make some data
userid <- rep(1:2,times=4)
data1 <- replicate(8 , paste( sample(letters , 3 ) , collapse = "" ) )
data2 <- sample(10,8)
df <- data.frame( userid , data1 , data2 )

#  Split on userid
out <- split( df , f = df$userid )
#$`1`
#  userid data1 data2
#1      1   gjn     3
#3      1   yqp     1
#5      1   rjs     6
#7      1   jtw     5

#$`2`
#  userid data1 data2
#2      2   xfv     4
#4      2   bfe    10
#6      2   mrx     2
#8      2   fqd     9

Доступ к каждому элементу с помощью оператора [[ следующим образом:

out[[1]]
#  userid data1 data2
#1      1   gjn     3
#3      1   yqp     1
#5      1   rjs     6
#7      1   jtw     5

Или используйте функцию *apply для выполнения дальнейших операций над каждым элементом списка , Например, чтобы взять среднее значение столбца data2, вы можете использовать sapply следующим образом:

sapply( out , function(x) mean( x$data2 ) )
#   1    2 
#3.75 6.25 
65
ответ дан Simon O'Hanlon 23 August 2018 в 21:17
поделиться
  • 1
    Я задавался вопросом о производительности dlply(df, .(userid)) и обнаружил, что это плохо по сравнению с split, даже без привлечения времени выполнения require(plyr), спасибо и OP! – Francis 26 March 2015 в 15:04
5
ответ дан Aus_10 23 August 2018 в 21:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: