Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 古怪的行为_R_Paste - Fatal编程技术网

R 古怪的行为

R 古怪的行为,r,paste,R,Paste,我一辈子都搞不明白为什么会发生这种情况,另一位分析师也对此进行了研究,同样感到困惑。可能与组合的数量有关,但我尝试过的变体没有帮助 下面的语法重新创建了一些用于构建API调用的语法示例。我有一个域列表和一个国家列表,它将这些域和国家列表结合在一起,给出每个组合,即bbc.com-英国、bbc.com-西班牙、bbc.com-波兰。国家代码为2位ISO代码,在下面的示例中,域为随机文本 出于某种原因,当112个域与7个国家合并时,每个域都会被赋予一个国家,即bbc.com-UK、bbc.com-U

我一辈子都搞不明白为什么会发生这种情况,另一位分析师也对此进行了研究,同样感到困惑。可能与组合的数量有关,但我尝试过的变体没有帮助

下面的语法重新创建了一些用于构建API调用的语法示例。我有一个域列表和一个国家列表,它将这些域和国家列表结合在一起,给出每个组合,即bbc.com-英国、bbc.com-西班牙、bbc.com-波兰。国家代码为2位ISO代码,在下面的示例中,域为随机文本

出于某种原因,当112个域与7个国家合并时,每个域都会被赋予一个国家,即bbc.com-UK、bbc.com-UK、bbc.com-UK。如果我再添加两个国家,如第二个示例中所示,这是可行的。更改域的数量也可以使其正常工作

domains <- data.frame(Domain=paste(stri_rand_strings(112, 5, pattern = "[A-Za-z0-9]"),".com"))

###DOES NOT WORK
country <- data.frame(country=rep(c("au","be","fr","nl","pl","ch","us"),nrow(domains)))                  

###DOES WORK
country <- data.frame(country=rep(c("au","be","fr","nl","pl","ch","us","aa","aa"),nrow(domains)))   


APICall <- paste0('https://api.abc.com/website/',domains$Domain,"/start_date=","2017-03",'&end_date=',"2018-02","&country=",country$country)
APICall <- transform(APICall,Domain=gsub(".*website/","",APICall))
APICall$Domain<- gsub("/.*","",APICall$Domain)
APICall <- transform(APICall,Country=strtrim(gsub(".*&country=","",APICall$X_data),2))
APICall <- transform(APICall,Date=strtrim(gsub(".*/start_date=","",APICall$X_data),7))
我有一个解决办法添加两个aa国家,但我真的很想知道发生了什么


Sys info:R 3.3.2 R Studio版本1.0.143 OS Sierra 10_12_3

您似乎想要创建所有可能的组合,但是当您使用简单的代表时,无法保证您将创建所有可能的组合

如果你从两个简单的向量开始

domains <- paste(stringi::stri_rand_strings(112, 5, pattern = "[A-Za-z0-9]"),".com")
countries <- c("au","be","fr","nl","pl","ch","us")
或者,如果您使用的是tidyverse软件包中的tidyr

仅仅使用rep不会给出所有的组合。比如说

x <- letters[1:10]
y <- rep(letters[21:25], length(x))
comb <- paste(x,y)

所以那里有很多重复的。如果一个向量长度可以被另一个向量长度整除,那么重复将在另一个向量长度的周期内重复,并且你不会得到所有可能的组合

我认为原因是,在第二种情况下,对于aa,频率是两倍,而在第一种情况下,对于所有唯一的元素,频率都是相同的@akrun,你不太明白你在说什么?我玩过不同数量的域名和国家,例如只有一个aa,但找不到任何模式。这非常有效,谢谢!这两个我都不知道。谢谢你的解释。
tidyr::crossing(domains, countries)
x <- letters[1:10]
y <- rep(letters[21:25], length(x))
comb <- paste(x,y)
length(comb)
# [1] 50
length(unique(comb))
# [1] 10