我无法将文件加载到RAM中(假设用户可能需要具有100亿条记录的第一个十亿个文件)
这是我的解决方案,但我认为必须有一个更快的方法?
谢谢
# specified by the user
infile <- "/some/big/file.txt"
outfile <- "/some/smaller/file.txt"
num_lines <- 1000
# my attempt
incon <- file( infile , "r")
outcon <- file( outfile , "w")
for ( i in seq( num_lines ) ){
line <- readLines( incon , 1 )
writeLines( line , outcon )
}
close( incon )
close( outcon )
Run Code Online (Sandbox Code Playgroud) 下面的代码在交互模式下工作正常但在函数中使用时失败.它只是两个身份验证POST命令,然后是数据下载.我的目标是让它在一个函数内部工作,而不仅仅是在交互模式下.
这个问题是有点续集的这个问题 .. ICPSR最近更新了他们的网站.以下最小可重复的示例需要一个免费帐户,可在
我尝试添加Sys.sleep(1)和各种httr::GET/ httr::POST电话但没有任何效果.
my_download <-
function( your_email , your_password ){
values <-
list(
agree = "yes",
path = "ICPSR" ,
study = "21600" ,
ds = "" ,
bundle = "rdata",
dups = "yes",
email=your_email,
password=your_password
)
httr::POST("https://www.icpsr.umich.edu/cgi-bin/terms", body = values)
httr::POST("https://www.icpsr.umich.edu/rpxlogin", body = values)
tf <- tempfile()
httr::GET(
"https://www.icpsr.umich.edu/cgi-bin/bob/zipcart2" ,
query = values ,
httr::write_disk( tf , overwrite = TRUE ) ,
httr::progress()
)
}
# fails …Run Code Online (Sandbox Code Playgroud) 我正在尝试从https页面下载文件,该页面需要按"我同意"按钮然后存储cookie.如果这个答案在某个地方显而易见,我道歉
当我直接在Chrome中打开网页并单击"我同意"时,文件开始自动下载.
我试图复制这个例子,但我不认为hangseng网站实际上存储了cookie /身份验证,所以我不知道这个例子是否应该是我需要的.
除此之外,我认为SSL使身份验证变得复杂,因为我认为getURL()调用将需要证书规范,如cainfo = system.file("CurlSSL","cacert.pem",package ="RCurl"))
我太过RCurl的初学者了解这个网站是否相当困难,或者我是否只是遗漏了一些明显的东西.
谢谢!
假设我有一个可执行文件c:\my directory\my file.exe,我希望在我的R脚本开头附近启动,然后在我的R脚本结束附近终止.什么是干净的方式在Windows平台上做到这一点?
我知道R命令喜欢shell和shell.exec,但是我不清楚这些将允许干净地捕获进程id然后使用类似pskill函数的东西.还不清楚通过某种管道连接运行这个可执行文件是否更有意义- 或者管道是如何工作的.这个特殊的可执行文件应PATH作为系统变量包含在我的窗口中,因此可以想象该system函数在这里也可能有价值.
另外澄清:捕获进程id可能很重要,因为(至少对我而言)这将用于数据库服务器的可执行文件 - 如果多个数据库服务器当前在同一台机器上运行,则该进程不应该杀死所有这些 - 只是在R脚本开头初始化的那个.
额外信用:假设c:\my directory\my file.exe应该通过实际执行另一个文件来调用c:\my directory\another file.bat- 但是my file.exe需要在R脚本结束时将其杀死.
我试图从这个政府网站的API自动下载一些数据.
网站指示:
All requests for this version should be made to the following URL:
http://api.finder.healthcare.gov/v2.0/
Run Code Online (Sandbox Code Playgroud)
我可以找到大量的相关信息如何发送XML请求,但没有一个例子是R特异性..并有大量的R代码里面,在那里,展示了如何使用XML,httr以及RCurl包,但我找不到任何的例子在SO或r-help邮件列表中,了解如何实际发送 xml请求...还有更多用于解析响应的文档.
在政府网站上,如果单击该PlansForIndividualOrFamily Samples示例,则会显示需要发送的xml请求(下面的代码).
url <- "http://api.finder.healthcare.gov/v2.0/"
xml.request <-
"<?xml version='1.0' encoding='UTF-8'?>
<PrivateOptionsAPIRequest>
<PlansForIndividualOrFamilyRequest>
<Enrollees>
<Primary>
<DateOfBirth>1990-01-01</DateOfBirth>
<Gender>Male</Gender>
<TobaccoUser>Smoker</TobaccoUser>
</Primary>
</Enrollees>
<Location>
<ZipCode>69201</ZipCode>
<County>
<CountyName>CHERRY</CountyName>
<StateCode>NE</StateCode>
</County>
</Location>
<InsuranceEffectiveDate>2012-10-01</InsuranceEffectiveDate>
<IsFilterAnalysisRequiredIndicator>false</IsFilterAnalysisRequiredIndicator>
<PaginationInformation>
<PageNumber>1</PageNumber>
<PageSize>10</PageSize>
</PaginationInformation>
<SortOrder>
<SortField>OOP LIMIT - INDIVIDUAL - IN NETWORK</SortField>
<SortDirection>ASC</SortDirection>
</SortOrder>
<Filter/>
</PlansForIndividualOrFamilyRequest>
</PrivateOptionsAPIRequest>"
Run Code Online (Sandbox Code Playgroud) 我正在尝试下载一个1.1千兆字节的文件,httr但我遇到以下错误:
x <- GET( extract.path )
Error in curlPerform(curl = handle$handle, .opts = curl_opts$values) :
cannot allocate more space: 1728053248 bytes
Run Code Online (Sandbox Code Playgroud)
我的C盘有400GB免费..
在RCurl包中,我看到maxfilesize和maxfilesize.large使用时的选项,getCurlOptionsConstants()但我不明白是否/如何传递httr通过config或set_config..或如果我需要切换到RCurl这... ..即使我确实需要切换,会增加最大文件大小的工作吗?
这是我的sessionInfo ..
> sessionInfo()
R version 3.0.0 (2013-04-03)
Platform: i386-w64-mingw32/i386 (32-bit)
locale:
[1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252 LC_MONETARY=English_United States.1252 LC_NUMERIC=C LC_TIME=English_United States.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] XML_3.96-1.1 …Run Code Online (Sandbox Code Playgroud) 是否有一种相当直接的方法来确定远程文件的文件大小而不下载整个文件?Stack Overflow回答了如何用PHP和curl做到这一点,所以我想在R中也可以.如果可能,我认为最好避免RCurl,因为这需要为非Windows用户额外安装?
在这个调查分析网站上,我写了很多脚本来自动下载政府机构(如美国人口普查局和cdc)的大数据文件.我试图通过创建"下载缓存" 来实现一个不会下载已经下载的文件的附加组件- 但我担心如果出现以下情况,这个"下载缓存"可能会被破坏:1)主机网站更改了文件或2)用户在中途取消下载.因此,在决定是从源HTTP或FTP站点下载文件时,我想将本地文件大小与远程文件大小进行比较.如果它们不相同,请再次下载该文件.
什么是一些好的克里金/插值思路/选项,允许高加权点在绘制的R图上轻微加权点?
康涅狄格州有八个县.我找到了质心,想要绘制这8个县的贫困率.其中三个县人口密集(约100万人),其他五个县人口稀少(约10万人).由于这三个人口稠密的县有超过90%的州人口,我希望这三个人口密集的县完全"压倒"地图并影响整个县境内的其他点.
KrigR fields包中的函数有很多参数,也有可以调用的协方差函数,但我不知道从哪里开始?
这里是可重现的代码,可以快速生成硬边界地图,然后是三个不同加权的地图.希望我可以只对这段代码进行更改,但是它可能需要像geoRglm包一样更复杂的东西?三个加权地图中的两个看起来几乎相同,尽管其中一个加权地图是另一个加权地的10倍.
谢谢!!


编辑:这是我想要的行为的图片示例 -

人口普查局没有提供全国范围的公共使用微观数据区域(美国社区调查中可用的最小地理位置).我尝试将它们全部用几种不同的方法组合在一起,但即使是那些一旦它击中加利福尼亚就会使标识符失效的方法.我是在做傻事还是这需要一个困难的解决方法?这里是重现事情的代码.
library(taRifx.geo)
library(maptools)
td <- tempdir() ; tf <- tempfile()
setInternet2( TRUE )
download.file( "ftp://ftp2.census.gov/geo/tiger/TIGER2014/PUMA/" , tf )
al <- readLines( tf )
tl <- al[ grep( "geo/tiger/TIGER2014/PUMA/tl_2014_" , al ) ]
fp <- gsub( "(.*)geo/tiger/TIGER2014/PUMA/tl_2014_([0-9]*)_puma10\\.zip(.*)" , "\\2" , tl )
# get rid of alaska
fp <- fp[ fp != '02' ]
af <- paste0( "ftp://ftp2.census.gov/geo/tiger/TIGER2014/PUMA/tl_2014_" , fp , "_puma10.zip" )
d <- NULL
for ( i in af ){
try( file.remove( z ) , silent = TRUE ) …Run Code Online (Sandbox Code Playgroud) 我正在打一个不知道从哪里开始的讨厌的bug.这个帖子 -
- 一般有很多关于调试的技巧和建议.遗憾的是,没有一种策略适用于被称为函数的问题.Internal()
我如何诊断似乎在Internal函数内而不是在正常R函数内发生的问题?
新鲜的R会议:
> .Internal(La_rs(matrix(1,1),TRUE))
$values
[1] 1
Run Code Online (Sandbox Code Playgroud)
经过漫长的脚本后我的R会话:
> .Internal(La_rs(matrix(1,1),TRUE))
Error: 'a' must be a complex matrix
Run Code Online (Sandbox Code Playgroud)
我有一个单独的帖子,为我的具体问题提供了可重现的示例,但是想在一个单独的线程中更一般地提出问题:
R用户如何解决内部调用的函数.Internal()?