事情是这样的,我在用decoupler做功能富集分析的时候,首先通过以下代码获得hallmark和go_bp通路,变量hallmark和go_bp都是dataframe:
import decoupler as dc
msigdb = dc.get_resource('MSigDB')
database = 'go_biological_process'
go_bp = msigdb[msigdb['collection']== database]
go_bp = go_bp[~go_bp.duplicated(("geneset", "genesymbol"))]
database = 'hallmark'
hallmark = msigdb[msigdb['collection']== database]
hallmark = hallmark[~hallmark.duplicated(("geneset", "genesymbol"))]
接着,我定义了一个函数用于富集分析:
def function_analysis(pdata, test_level, database='hallmark'):
#这里需要通过字符串'hallmark'访问外部变量hallmark
这里的解决办法是使用 Python 的内置函数 globals()
,该函数返回全局作用域中的变量字典,可以通过在字典中查找对应的键来获取变量的值。
示例代码:
# 输入字符串
variable_name = "hallmark"
# 使用 globals() 获取变量
value = globals()[variable_name]
print(value) # 等同于print(hallmark)
解释:
-
globals()
:返回一个包含当前模块中所有全局变量的字典。字典的键是变量名(字符串形式),值是变量的实际值。 -
globals()[variable_name]
:通过传入变量名的字符串,可以从字典中获取到该变量的值。
注意:
- 如果该变量是在局部作用域中定义的而不是全局作用域中,可以使用
locals()
。 - 如果变量名在给定作用域中不存在,会抛出
KeyError
错误。因此,可以在查找前使用if variable_name in globals():
进行检查。
补充:
如果你是R语言用户,可以通过get函数来实现类似功能:
# 输入字符串
variable_name <- "hallmark"
# 使用 get() 获取变量的值
value <- get(variable_name)
print(value) # 等同于print(hallmark)
网友评论