我习惯使用tf.contrib.layers.fully_connected来构建一个完全连接的层.最近我遇到了tf.layers.dense,显然是在第一个功能可以使用的地方使用的.可互换,产生相同的输出吗?
我有一个网址,我需要发送使用日期变量的请求.https地址采用日期变量.我想使用像Python中的格式化运算符%那样将日期分配给地址字符串.R有一个类似的运算符还是我需要依赖paste()?
# Example variables
year = "2008"
mnth = "1"
day = "31"
Run Code Online (Sandbox Code Playgroud)
这就是我在Python 2.7中要做的事情:
url = "https:.../KBOS/%s/%s/%s/DailyHistory.html" % (year, mnth, day)
Run Code Online (Sandbox Code Playgroud)
或者在3. +中使用.format().
我唯一知道在R中做的事情似乎很冗长并且依赖于粘贴:
url_start = "https:.../KBOS/"
url_end = "/DailyHistory.html"
paste(url_start, year, "/", mnth, "/", day, url_end)
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法呢?
使用 dplyr 函数对数据进行过滤、分组和变异的函数。基本管道序列在函数之外工作得很好,这就是我使用真实列名称的地方。将其放入一个函数中,其中列名称是一个变量,并且某些函数可以工作,但有些函数则不能,尤其是 dplyr::filter()。例如:
var1 <- c('yes', NA, NA, 'yes', 'yes', NA, NA, NA, 'yes', NA, 'no', 'no', 'no', 'maybe', NA, 'maybe', 'maybe', 'maybe')
var2 <- c(1:18)
df <- data.frame(var1, var2)
Run Code Online (Sandbox Code Playgroud)
这工作正常(即过滤 NA):
df%>%filter(!is.na(var1))
Run Code Online (Sandbox Code Playgroud)
...但这并没有:
x <- "var1"
df%>%filter(!is.na(x))
Run Code Online (Sandbox Code Playgroud)
...但这确实:
df%>%select(x)
Run Code Online (Sandbox Code Playgroud)
需要专门过滤掉 NA。
尝试了 get("x"),不行,然后切片:
df[!is.na(x),]
Run Code Online (Sandbox Code Playgroud)
……也不好。
有关如何传递变量以在函数内部(或外部)进行过滤以及为什么变量与其他 dplyr 函数一起使用的任何想法?
使用lapply,我将一个输入向量输入到一个函数中,该函数为每个输入返回两个向量的列表 - 可能的 nth-gram 及其概率。我最终得到了一个具有以下结构的列表列表(笑):
> str(lol)
List of 3
$ :List of 2
..$ np1 : chr [1:7] "a" "years" "the" "my" ...
..$ probs: num [1:7] 0.1481 0.1357 0.0841 0.0698 0.0522 ...
$ :List of 2
..$ np1 : chr [1:167] "the" "a" "my" "years" ...
..$ probs: num [1:167] 0.2745 0.0924 0.0605 0.0437 0.0334 ...
$ :List of 2
..$ np1 : chr [1:9493] "the" "a" "my" "this" ...
..$ probs: num [1:9493] 0.267 0.0777 …Run Code Online (Sandbox Code Playgroud) 我有一个很大的(1m+ 行).txt 文件,我正在读入 R。每一行都是一个新闻故事的摘录,它使用了来自其原始来源的字符,这会导致问题。有些行将包含所有 ASCII 字符,而其他行则不包含但确实适合 UTF-8 编码框架。还有其他字符(类似于 Dingbats)似乎无视所有编码,编码字符也是如此。
我能够使用 Notepad++ 清除编码字符,但是每次我尝试将完整数据集读入 R 时, read 或 readLines 函数只能读取第一个字符和它无法解释的第一个字符。
> con <- file(description=filepath, open="r", encoding = "UTF-8")
> news <- readLines(con, n = 100000)
invalid input found on input connection 'en_US/en_US_news.txt' # warning message not error
Run Code Online (Sandbox Code Playgroud)
无效的输入消息似乎只是一个警告,但 R 只能读入第一个“难以辨认”的字符。我尝试写入news.txt 文件以查看它停止的字符,但像这样手动清理文件是不现实的。
如何在循环中使用try()或trycatch()跳过任何具有难以辨认字符的行?
我有一系列日期:
date_rng <- seq( as.Date("2008-01-01"), as.Date("2008-12-31"), by="+1 day")
Run Code Online (Sandbox Code Playgroud)
我有一些辅助功能,这些功能必然与问题相关,我会尝试将它们排除在外.
我从第一个日期开始并调用此函数:
# Function for getting weather table by airport code and date and return dataframe
get_table <- function(code, date){
adv <- sprintf(
"https://www.wunderground.com/history/airport/K%s/2008/%s/%s/DailyHistory.html",
code, month(date), day(date)
)
h <- adv %>% read_html()
t <- h%>%
html_nodes(xpath = '//*[@id="obsTable"]') %>%
html_table()
df <- data.frame(t)
return(df)
}
atl_weather <- get_table("ATL", date_rng[1])
Run Code Online (Sandbox Code Playgroud)
现在我迭代剩下的日期为每个日期创建一个新的df然后我尝试附加到原始日期:
# Loop through remaining dates and bind dfs
for(d in as.list(date_rng[2:4])){
rbind(atl_weather, get_table("ATL", d), d)
}
Run Code Online (Sandbox Code Playgroud)
但绑定不会发生,我留下了在for循环之前创建的范围中第一个日期的原始数据帧.
这有效:
atl_weather <- get_table("ATL", …Run Code Online (Sandbox Code Playgroud) 使用NOAA 恶劣天气数据EVTYPE,其中包括描述天气事件类型的变量(事件类型)。这些值包括许多同义词,我想将它们收集到几个更广泛的名称下。例如,还有TORNADO、ROTATING WALL CLOUD、FUNNEL CLOUD,并且WHIRLWIND在某种意义上描述了相对相似的事件。在不深入气象学的微妙之处的情况下,我想将类似的几乎同义的值组合在一个值名称下。
假设我已将数据集加载到数据框中noaa_clean并应用此:
tornado <- sapply(as.character(noaa_clean$EVTYPE),
function(x){grepl("^.*TORNAD.*$", x) |
grepl("^.*SPOUT.*$", x) |
grepl("^.*WHIRL.*$", x) |
grepl("^.*FUNNEL.*$", x) |
grepl("^.*ROTATING WALL CLOUD.*$", x) |
grepl("^.*DUST DEVIL.*$", x)})
noaa_clean[tornado, "EVCAT"] <- "TORNADO"; rm(tornado)
Run Code Online (Sandbox Code Playgroud)
它运行良好,但我有几个这样的程序,需要一些时间(约 5-10 分钟)才能运行它们。我的问题是:是否有更好的方法来利用grepl()或正则表达式可以提高效率?
我重新格式化了一些字符向量,但格式化中有一些异常,我出乎意料地需要处理.这是一个将重新格式化的字符串示例:
t <- "COZ009 - 013 - 016 - 018 034>036 - 039>040 - 066>081"
Run Code Online (Sandbox Code Playgroud)
问题是这里缺少一个连字符"... 018 034> 036 ......".它应该是"...... 018 - 034> 036 ......".
我想使用一个简单的基函数来添加一个连字符gsub,但是如何在不触及所有其他空格的情况下替换缺少连字符的空格?那就是如何根据周围的角色进行替换?
我能够想出的最接近的是.
t2 <- gsub(" - ", "-", t)
gsub(" ", "-", t2)
[1] "COZ009-013-016-018-034>036-039>040-066>081"
Run Code Online (Sandbox Code Playgroud)
可能这个解决方案没有任何问题,但知道如何有条件地更换会很好.
在我探索 Python 的早期,我记得有人告诉我pop,在列表的第一个元素上使用不一定是不好的做法,但不是最佳做法。给出的原因是基本上必须形成一个新列表才能重新索引所有剩余元素。然而,情况似乎并非如此:
test_list = [1, 2, 3, 4, 5]
hex(id(test_list))
Out[29]: '0x17d5b172f48'
test_list.pop(0)
Out[30]: 1
hex(id(test_list))
Out[31]: '0x17d5b172f48'
Run Code Online (Sandbox Code Playgroud)
尽管如此,如果将索引重新分配给剩余元素会产生一些开销,或者从除最后一个元素之外的任何其他元素弹出是否有其他成本,我仍然在犹豫。
编辑
老实说,在处理大型列表时,弹出最后一个元素和第一个元素之间的区别看起来并不那么微不足道:
test_list = list(range(int(1e6)))
%timeit test_list.pop(0)
671 µs ± 26 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
test_list = list(range(int(1e5)))
%timeit test_list.pop(0)
The slowest run took 5.01 times longer than the fastest. This could mean that an intermediate result is being cached.
17.3 µs ± 7.91 µs per loop (mean ± …Run Code Online (Sandbox Code Playgroud)