Вы можете найти это сами:
#!/usr/bin/python
import logging
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__)
logger.debug('t1 has started')
logger.debug('t2 is being imported')
import t2
logger.debug('A is being "compiled"')
class A:
flag = False
logger.debug('ID A: %r', id(A))
logger.debug('ID A.flag %r', id(A.flag))
logger.debug('What is __name__? %r', __name__)
if __name__ == "__main__":
logger.debug('__name__ was "__main__"')
logger.debug('Calling t2.f()')
t2.f()
logger.debug('t2.f() was called')
logger.debug('ID A.flag: %r', id(A.flag))
print(A.flag)
#!/usr/bin/python
import logging
logger = logging.getLogger(__name__)
logger.debug('t2 is being imported')
logger.debug('t2 is now importing t1')
import t1
def f():
logger.debug('f is being called')
t1.A.flag = True
logger.debug('ID t1: %r', id(t1))
logger.debug('ID t1.A: %r', id(t1.A))
logger.debug('ID t1.A.flag: %r', id(t1.A.flag))
print(t1.A.flag)
Я раскалываю это с комментариями
DEBUG:__main__:t1 has started
DEBUG:__main__:t2 is being imported
DEBUG:t2:t2 is being imported
DEBUG:t2:t2 is now importing t1
Как вы можете видеть, в первый раз (как отмечали другие) t1
на самом деле имеет имя __main__
. Он пытается импортировать t2
, но сразу t2
пытается импортировать t1
.
DEBUG:t1:t1 has started
DEBUG:t1:t2 is being imported
Вы можете видеть, что ни одно из операторов журнала t2
не запускается. Это потому, что Python кэширует импортированные модули, поэтому он сначала смотрит в кеш для t2
и говорит: «Ага, я уже импортировал этого парня, мне просто нужно вернуть его, вот и все!»
DEBUG:t1:A is being "compiled"
DEBUG:t1:ID A: 140377934341704
DEBUG:t1:ID A.flag 4312040768
DEBUG:t1:What is __name__? 't1'
Итак, вы заметите, что теперь он пробился через импорт t1
. И t2
DEBUG:t2:t2 is done being imported
Выполнение продолжается в __main__
t1
DEBUG:__main__:A is being "compiled"
DEBUG:__main__:ID A: 140377934344360
DEBUG:__main__:ID A.flag 4312040768
Обратите внимание, что id
для этого A
и A.flag
DEBUG:__main__:What is __name__? '__main__'
DEBUG:__main__:__name__ was "__main__"
DEBUG:__main__:Calling t2.f()
DEBUG:t2:f is being called
DEBUG:t2:ID t1: 4317998840
DEBUG:t2:ID t1.A: 140377934341704
DEBUG:t2:ID t1.A.flag: 4312040736
Обратите внимание, что эти id
s соответствуют t1.A
, а не __main__.A
s.
True
DEBUG:__main__:t2.f() was called
DEBUG:__main__:ID A.flag: 4312040768
False
Пытались создать ваши данные, используя следующее:
df <- data.frame(col1 = c(1,1,2,2,1,1,2,2),
col2 = c(34,34,342,23,34,34,342,23),
col3 = c(3,4,3,4,3,4,3,4))
И, если вы хотите создать подмножество только на основе одного столбца, вы можете использовать @ kyle-marsh solution
> df[df$col1 == 1, ]
col1 col2 col3
1 1 34 3
2 1 34 4
5 1 34 3
6 1 34 4
[118 ] И, если вам нужны только отдельные столбцы, возможно, вы можете попробовать это
> unique(df[df$col1 == 1, ])
col1 col2 col3
1 1 34 3
2 1 34 4
И, если вам нужно агрегировать данные на основе col1
, вы можете попробовать следующее. Поскольку col1
является числовым,
> aggregate(df[,-1], by = list(col1 = df$col1), sum)
col1 col2 col3
1 1 136 14
2 2 730 14
Вы можете преобразовать свою таблицу во фрейм данных, а затем в подмножество. Это может быть самый простой способ.
Давайте назовем вашу таблицу «tab», а новый фрейм данных «df».
df<-as.data.frame(tab)
Теперь намного проще установить подмножество на основе вашего интересующего столбца. Мы сделаем еще один df с именем "df_subsetted", подмножеством df на основе значения для Col1.
df_subsetted<-df[df$Col1==1,]
Или, если вы хотите использовать функцию фильтра.
require(dplyr)
df_subsetted<-filter(df, Col1==1)