我在重命名对象的脚本的一部分上遇到问题,这里是一个示例:
pod install
当我使用' Source'它失败了
rm( list = ls( ) )
# create object 'mes' in 'A.rdata'
setwd( "k:/My R space/" )
mes <- list( a = c(1,2,3,4,5), b = c("a","b","c","d") )
save( mes, file = "A.rdata" )
rm( list = ls( ) )
cat( "\14" )
# rename object 'mes' to 'essai'
setwd( "k:/My R space/" )
file = "A.rdata"
env=parent.frame()
#
tmp<-new.env()
load.names <- load( file, tmp )
Map( assign, "essai", mget( load.names, envir = tmp ), MoreArgs = list(envir = env ) )
ls.str( essai ) }
当我使用Run时,它可以工作!
> $essai
$essai$a
[1] 1 2 3 4 5
$essai$b
[1] "a" "b" "c" "d"
> ls.str( essai )
Error in ls.str(essai) : object 'essai' not found
有什么想法吗? 谢谢, 标记
答案 0 :(得分:0)
essai
已在env
中分配。
但env
定义为parent.frame()
。
使用“运行”时,parent.frame()
会提供<environment: R_GlobalEnv>
。
来自source
,使用默认local = FALSE
,您的脚本也会在&#34;全球环境.GlobalEnv
中执行,通常称为用户工作区&# 34; (引自help(".GlobalEnv")
),您可以检查是否在脚本中添加environment()
。
但是(再次!)。即使表达式在.GlobalEnv
中执行,它们也会通过调用source()
的R代码中的其他(可能是深度嵌套的)其他函数来计算。这就是parent.frame()
,即评估函数的调用环境,它本身就是在source()
调用内动态创建的执行环境。
如果您在脚本中打印parent.frame()
,则可以检查它,每次都会获得不同的值,例如<environment: 0x40dca18>
,然后<environment: 0x53be0f8>
,然后......
嗯,足够混乱。
使用“运行”ls.str( essai )
时,essai
中很容易找到.GlobalEnv
,env
等于source()
!
当您使用essai
时,.GlobalEnv
或任何封闭环境中找不到<environment: 0x53be0f8>
,因为它属于ls.str(get("essai", envir = env))
或其他任何内容。
您可以使用import urllib.request
url = "http://www.londonstockexchange.com/exchange/prices-and-markets/stocks/indices/ftse-indices.html"
infile = urllib.request.urlopen(url) # Open the URL
data = infile.read().decode('ISO-8859-1') # Read the content as string decoded with ISO-8859-1
print(data) # Print the data to the screen