小编Hil*_*ers的帖子

如何在Shiny eventReactive处理程序中侦听多个事件表达式

我想要两个不同的事件来触发我的应用程序中各种图表/输出所使用的数据的更新.一个是单击按钮(input$spec_button),另一个是点击点上的点(mainplot.click$click).

基本上,我想同时列出两者,但我不知道如何编写代码.这就是我现在拥有的:

在server.R中:

data <- eventReactive({mainplot.click$click | input$spec_button}, {
    if(input$spec_button){
      # get data relevant to the button
    } else {
      # get data relevant to the point clicked
    }
  })
Run Code Online (Sandbox Code Playgroud)

但if-else子句不起作用

Error in mainplot.click$click | input$spec_button : operations are possible only for numeric, logical or complex types

- >我可以使用某种动作组合器功能用于该mainplot.click$click | input$spec_button子句吗?

r shiny

74
推荐指数
5
解决办法
3万
查看次数

索引Pandas数据帧:整数行,命名列

Say df是一个熊猫数据帧.

  • df.loc[] 只接受名字
  • df.iloc[] 只接受整数(实际展示位置)
  • df.ix[] 接受名称和整数:

引用行时,df.ix[row_idx, ]只想获得名称.例如

df = pd.DataFrame({'a' : ['one', 'two', 'three','four', 'five', 'six'],
                   '1' : np.arange(6)})
df = df.ix[2:6]
print(df)

   1      a
2  2  three
3  3   four
4  4   five
5  5    six

df.ix[0, 'a']
Run Code Online (Sandbox Code Playgroud)

抛出错误,它不会返回'两个'.

在引用列时,iloc更喜欢整数,而不是名称.例如

df.ix[2, 1]
Run Code Online (Sandbox Code Playgroud)

返回'三',而不是2.(虽然df.idx[2, '1']确实返回2).

奇怪的是,我想要完全相反的功能.通常我的列名非常有意义,所以在我的代码中我直接引用它们.但是由于大量的观察清理,我的pandas数据框中的行名通常不对应range(len(df)).

我意识到我可以使用:

df.iloc[0].loc['a'] # returns three
Run Code Online (Sandbox Code Playgroud)

但它看起来很难看!有没有人知道更好的方法来做到这一点,所以代码看起来像这样?

df.foo[0, 'a'] # returns three
Run Code Online (Sandbox Code Playgroud)

事实上,是否有可能将自己的新方法添加到pandas.core.frame.DataFrames,所以例如 df.idx(rows, cols)实际上是df.iloc[rows].loc[cols]

python dataframe pandas

36
推荐指数
5
解决办法
3万
查看次数

RStudio为每个功能错误进入调试模式 - 我该如何阻止它?

我已经使用RStudio多年了,这在我之前从未发生过.出于某种原因,每次函数抛出错误时,RStudio都会进入调试模式(我不希望它).即使在单个函数上使用undebug()之后也是如此.

> undebug(http.get)
Warning message:
In undebug(fun) : argument is not being debugged
> x = http.get(country = 'KE')

http --timeout=60 get "http://foo@bar.com/observation?country=KE" > freshobs.json </dev/null
Error in fromJSON(file = "freshobs.json") : unexpected character 'O'

Error in el[["product_name"]] : subscript out of bounds
Called from: grepl(el[["product_name"]], pattern = "json:", fixed = T)
Browse[1]> Q
Run Code Online (Sandbox Code Playgroud)

我使用的任何函数都会导致调试模式启动 - 这非常烦人,因为它打开了一个源查看器并让您远离代码.有谁知道如何停止这项功能?如果在"首选项"中的"仅在我的代码包含错误时使用调试模式"复选框中并且未选中,则会发生这种情况.

谢谢!

debugging r rstudio

26
推荐指数
1
解决办法
4826
查看次数

如何删除RStudio绘图设备中的当前(但不是全部)图?

如何删除RStudio绘图设备中的当前(但不是全部)图?

dev.off()将删除所有的情节,但如果我只想删除一个?我不想按下那个红色的'x'按钮,因为我想在不按下按钮的情况下删除一个图.

r rstudio

18
推荐指数
1
解决办法
1万
查看次数

如何在多列中使用groupby转换

我有一个很大的数据帧,我正在按1到n列分组,并希望在两列(例如foo和bar)上对这些组应用函数.

这是一个示例数据帧:

foo_function = lambda x: np.sum(x.a+x.b)

df = pd.DataFrame({'a':[1,2,3,4,5,6],
                   'b':[1,2,3,4,5,6],
                   'c':['q', 'q', 'q', 'q', 'w', 'w'],  
                   'd':['z','z','z','o','o','o']})

# works with apply, but I want transform:
df.groupby(['c', 'd'])[['a','b']].apply(foo_function)
# transform doesn't work!
df.groupby(['c', 'd'])[['a','b']].transform(foo_function)
TypeError: cannot concatenate a non-NDFrame object
Run Code Online (Sandbox Code Playgroud)

transform显然无法将多个列组合在一起,因为它分别查看每个列(与apply不同).在速度/优雅方面,下一个最佳选择是什么?例如,我可以使用apply,然后df['new_col']通过使用创建pd.match,但这将需要匹配有时多个groupby列(col1和col2),这似乎真的很hacky /将需要相当数量的代码.

- >是否有一个类似groupby().变换的函数可以使用多个列的函数?如果这不存在,最好的黑客是什么?

python pandas

17
推荐指数
1
解决办法
1万
查看次数

是否有完整的潜在标签列表,Google的Vision API将返回?

我一直在测试Google的Vision API,以便为不同的图像添加标签.

对于给定的图像,我会得到这样的东西:

"google_labels": {
            "responses": [{
                "labelAnnotations": [{
                    "score": 0.8966763,
                    "description": "food",
                    "mid": "/m/02wbm"
                }, {
                    "score": 0.80512983,
                    "description": "produce",
                    "mid": "/m/036qh8"
                }, {
                    "score": 0.73635191,
                    "description": "juice",
                    "mid": "/m/01z1kdw"
                }, {
                    "score": 0.69849229,
                    "description": "meal",
                    "mid": "/m/0krfg"
                }, {
                    "score": 0.53875387,
                    "description": "fruit",
                    "mid": "/m/02xwb"
                }]
            }]
        }
Run Code Online (Sandbox Code Playgroud)

- >我的问题是:

  1. 有人知道Google是否已经发布了他们的完整标签列表(['produce', 'meal', ...])以及我在哪里可以找到它?
  2. 这些标签是否以任何方式构成? - 例如,它是否知道'食物'是'产品'的超集.

我猜是'不'和'不'因为我找不到任何东西,但是,也许不是.谢谢!

python google-app-engine google-cloud-vision

17
推荐指数
2
解决办法
3277
查看次数

Roxygen认为我的函数是一种S3方法,因此在安装我的软件包时会中断

我正在使用roxygen创建自己的包.我有一个导致问题的功能:

##' extract.sig.metadata
##' @param foo bar
##' @author me
##' @export
extract.sig.metadata <- function(foo){
# does stuff
}
Run Code Online (Sandbox Code Playgroud)

我已经创建了我的包骨架(使用devtools的create(my-package)),并且我使用了document()来处理roxygen标签.但是,当我尝试安装我的软件包时,它会失败:

... *安装帮助索引**构建软件包索引**测试是否可以加载已安装的软件包错误:加载命名空间'my-package'时找不到对象'extract'错误:加载失败执行停止

我很确定roxygen认为extract.sig.metadata是一个S3方法,即一种特殊形式的export(),但它没有找到函数export(),所以它正在破坏.但这不是一个s3方法,它只是一个名为extract.sig.metadata的函数.如果我查看Rd代码,/ usage标记看起来很奇怪:

\usage{
\method{extract}{sig.metadata}(spec.df, var = "product_name",
  ratio.cutoff = 0.001, prob.modifer = 3, frequency.cutoff = NA,
  verbose = F, assign.to.global.env = FALSE, use.bigrams = T, clean = T,
  ngram.dupe.n.cutoff = 0.1, max.obs = 10000)
}
Run Code Online (Sandbox Code Playgroud)

如果我确实将名称更改为extractSigMetadata,则问题在技术上已得到修复,并且.Rd代码会更改,

\usage{
 extractSigMetadata(foo)
}
Run Code Online (Sandbox Code Playgroud)

但我真的不想改变我的函数的名称(我的包中有几十个函数有相同的问题,并且它们被用在一堆脚本中 - 改变我的命名将是一个巨大的痛苦架构不).

--->有谁知道我怎么能告诉roxygen这只是一个正常的函数而不是奇怪的s3方法?我猜它与@method标签有关,但我不知道如何正确使用它来使这项工作.谢谢!!!

methods r package roxygen

11
推荐指数
1
解决办法
390
查看次数

是否有R等价的其他语言三重引号?

我知道你可以使用"\"来转义特殊字符,但我很有兴趣创建将包含特殊字符的终端命令,这些命令无法很好地读取反斜杠.

作为一个简单的例子,我想要一个看起来像这样的命令:

echo hello "w" or'l'd
Run Code Online (Sandbox Code Playgroud)

这可以通过类似的东西来实现

system(command="""echo hello "w" or'l'd""")
Run Code Online (Sandbox Code Playgroud)

但R不处理三重引号.还有另外一种方法吗?即使从cat()捕获输出也没关系.例如newCommand = cat("echo hello \"w \"orld")

谢谢.

r system cat

9
推荐指数
1
解决办法
1607
查看次数

从pandas数据帧中提取一个字符串元素

好的,所以说我有一个pandas数据帧x,我有兴趣从中提取一个值:

> x.loc[bar==foo]['variable_im_interested_in']
Run Code Online (Sandbox Code Playgroud)

假设返回以下类型为pandas.core.series.Series:

24    Boss
Name: ep_wb_ph_brand, dtype: object
Run Code Online (Sandbox Code Playgroud)

但我想要的只是字符串'Boss'.包装第一行代码str()也无济于事,我得到:

'24    Boss\nName: ep_wb_ph_brand, dtype: object'
Run Code Online (Sandbox Code Playgroud)

我如何提取字符串?

python list names

7
推荐指数
2
解决办法
9320
查看次数

尽管改变了pyCharm python解释器路径,但无法将pandas导入pycharm解释器

我正在尝试在pyCharm python解释器中导入pandas,但我一直在变得可怕

>>> import pandas
Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "/Applications/PyCharm CE.app/Contents/helpers/pydev/pydev_import_hook.py", line 21, in do_import
    module = self._system_import(name, *args, **kwargs)
ImportError: No module named pandas
Run Code Online (Sandbox Code Playgroud)

当我从终端运行python时它工作正常.我已经阅读了这方面的解决方案,但到目前为止还没有工作.我已经重新安装,重新安装和更新了大熊猫.我已经将pyCharm项目的python解释器和默认的pyCharm python解释器更改为"2.7.5(/ usr/local/bin/python)",所以现在:

>>> os.system('which python')
/usr/local/bin/python
Run Code Online (Sandbox Code Playgroud)

发生在pycharm解释器和终端python解释器中.

有关如何解决此问题的更多想法?

谢谢

python pycharm pandas

5
推荐指数
1
解决办法
1万
查看次数